Generated by Cython 0.29.2

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: _GG03.c

+0001: # cython: boundscheck=False
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test_2, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 0002: # cython: wraparound=False
 0003: # cython: cdivision=True
 0004: #
 0005: cimport cython
 0006: cimport numpy as np
 0007: from cpython cimport bool
 0008: from libc.math cimport sqrt as Csqrt, ceil as Cceil, fabs as Cabs
 0009: from libc.math cimport floor as Cfloor, round as Cround, log2 as Clog2
 0010: from libc.math cimport cos as Ccos, acos as Cacos, sin as Csin, asin as Casin
 0011: from libc.math cimport atan2 as Catan2, pi as Cpi
 0012: from libc.math cimport NAN as Cnan
 0013: from cpython.array cimport array, clone
 0014: from cython.parallel import prange
 0015: from cython.parallel cimport parallel
 0016: from libc.stdlib cimport malloc, free, realloc
+0017: cdef double _VSMALL = 1.e-9
  __pyx_v_4tofu_4geom_5_GG03__VSMALL = 1.e-9;
+0018: cdef double _SMALL = 1.e-6
  __pyx_v_4tofu_4geom_5_GG03__SMALL = 1.e-6;
 0019: 
 0020: 
 0021: # import
+0022: import sys
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0023: import numpy as np
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0024: import scipy.integrate as scpintg
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s__157);
  __Pyx_GIVEREF(__pyx_n_s__157);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s__157);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_scipy_integrate, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_scpintg, __pyx_t_2) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0025: from matplotlib.path import Path
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Path);
  __Pyx_GIVEREF(__pyx_n_s_Path);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Path);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_matplotlib_path, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Path, __pyx_t_2) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0026: 
+0027: if sys.version[0]=='3':
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s_3, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L2;
  }
+0028:     from inspect import signature as insp
    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_n_s_signature);
    __Pyx_GIVEREF(__pyx_n_s_signature);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_signature);
    __pyx_t_2 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, __pyx_t_1, -1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 28, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_signature); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_insp, __pyx_t_1) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0029: elif sys.version[0]=='2':
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_sys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_version); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_2, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
/* … */
  }
  __pyx_L2:;
+0030:     from inspect import getargspec as insp
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_getargspec);
    __Pyx_GIVEREF(__pyx_n_s_getargspec);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_getargspec);
    __pyx_t_1 = __Pyx_patch_inspect(__Pyx_Import(__pyx_n_s_inspect, __pyx_t_2, -1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_getargspec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_d, __pyx_n_s_insp, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0031: 
 0032: 
 0033: 
+0034: __all__ = ['CoordShift',
  __pyx_t_1 = PyList_New(39); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_CoordShift);
  __Pyx_GIVEREF(__pyx_n_s_CoordShift);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_CoordShift);
  __Pyx_INCREF(__pyx_n_s_comp_dist_los_circle);
  __Pyx_GIVEREF(__pyx_n_s_comp_dist_los_circle);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_comp_dist_los_circle);
  __Pyx_INCREF(__pyx_n_s_comp_dist_los_circle_vec);
  __Pyx_GIVEREF(__pyx_n_s_comp_dist_los_circle_vec);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_comp_dist_los_circle_vec);
  __Pyx_INCREF(__pyx_n_s_comp_dist_los_vpoly);
  __Pyx_GIVEREF(__pyx_n_s_comp_dist_los_vpoly);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_comp_dist_los_vpoly);
  __Pyx_INCREF(__pyx_n_s_comp_dist_los_vpoly_vec);
  __Pyx_GIVEREF(__pyx_n_s_comp_dist_los_vpoly_vec);
  PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_comp_dist_los_vpoly_vec);
  __Pyx_INCREF(__pyx_n_s_is_close_los_vpoly_vec);
  __Pyx_GIVEREF(__pyx_n_s_is_close_los_vpoly_vec);
  PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_is_close_los_vpoly_vec);
  __Pyx_INCREF(__pyx_n_s_is_close_los_circle);
  __Pyx_GIVEREF(__pyx_n_s_is_close_los_circle);
  PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_is_close_los_circle);
  __Pyx_INCREF(__pyx_n_s_is_close_los_circle_vec);
  __Pyx_GIVEREF(__pyx_n_s_is_close_los_circle_vec);
  PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_is_close_los_circle_vec);
  __Pyx_INCREF(__pyx_n_s_which_los_closer_vpoly_vec);
  __Pyx_GIVEREF(__pyx_n_s_which_los_closer_vpoly_vec);
  PyList_SET_ITEM(__pyx_t_1, 8, __pyx_n_s_which_los_closer_vpoly_vec);
  __Pyx_INCREF(__pyx_n_s_which_vpoly_closer_los_vec);
  __Pyx_GIVEREF(__pyx_n_s_which_vpoly_closer_los_vec);
  PyList_SET_ITEM(__pyx_t_1, 9, __pyx_n_s_which_vpoly_closer_los_vec);
  __Pyx_INCREF(__pyx_n_s_LOS_sino_findRootkPMin_Tor);
  __Pyx_GIVEREF(__pyx_n_s_LOS_sino_findRootkPMin_Tor);
  PyList_SET_ITEM(__pyx_t_1, 10, __pyx_n_s_LOS_sino_findRootkPMin_Tor);
  __Pyx_INCREF(__pyx_n_s_Poly_isClockwise);
  __Pyx_GIVEREF(__pyx_n_s_Poly_isClockwise);
  PyList_SET_ITEM(__pyx_t_1, 11, __pyx_n_s_Poly_isClockwise);
  __Pyx_INCREF(__pyx_n_s_Poly_Order);
  __Pyx_GIVEREF(__pyx_n_s_Poly_Order);
  PyList_SET_ITEM(__pyx_t_1, 12, __pyx_n_s_Poly_Order);
  __Pyx_INCREF(__pyx_n_s_Poly_VolAngTor);
  __Pyx_GIVEREF(__pyx_n_s_Poly_VolAngTor);
  PyList_SET_ITEM(__pyx_t_1, 13, __pyx_n_s_Poly_VolAngTor);
  __Pyx_INCREF(__pyx_n_s_Sino_ImpactEnv);
  __Pyx_GIVEREF(__pyx_n_s_Sino_ImpactEnv);
  PyList_SET_ITEM(__pyx_t_1, 14, __pyx_n_s_Sino_ImpactEnv);
  __Pyx_INCREF(__pyx_n_s_ConvertImpact_Theta2Xi);
  __Pyx_GIVEREF(__pyx_n_s_ConvertImpact_Theta2Xi);
  PyList_SET_ITEM(__pyx_t_1, 15, __pyx_n_s_ConvertImpact_Theta2Xi);
  __Pyx_INCREF(__pyx_n_s_Ves_isInside);
  __Pyx_GIVEREF(__pyx_n_s_Ves_isInside);
  PyList_SET_ITEM(__pyx_t_1, 16, __pyx_n_s_Ves_isInside);
  __Pyx_INCREF(__pyx_n_s_Ves_mesh_dlfromL_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_mesh_dlfromL_cython);
  PyList_SET_ITEM(__pyx_t_1, 17, __pyx_n_s_Ves_mesh_dlfromL_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_meshCross_FromD);
  __Pyx_GIVEREF(__pyx_n_s_Ves_meshCross_FromD);
  PyList_SET_ITEM(__pyx_t_1, 18, __pyx_n_s_Ves_meshCross_FromD);
  __Pyx_INCREF(__pyx_n_s_Ves_meshCross_FromInd);
  __Pyx_GIVEREF(__pyx_n_s_Ves_meshCross_FromInd);
  PyList_SET_ITEM(__pyx_t_1, 19, __pyx_n_s_Ves_meshCross_FromInd);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_Cross);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_Cross);
  PyList_SET_ITEM(__pyx_t_1, 20, __pyx_n_s_Ves_Smesh_Cross);
  __Pyx_INCREF(__pyx_n_s_Ves_Vmesh_Tor_SubFromD_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Vmesh_Tor_SubFromD_cython);
  PyList_SET_ITEM(__pyx_t_1, 21, __pyx_n_s_Ves_Vmesh_Tor_SubFromD_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Vmesh_Tor_SubFromInd_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Vmesh_Tor_SubFromInd_cython);
  PyList_SET_ITEM(__pyx_t_1, 22, __pyx_n_s_Ves_Vmesh_Tor_SubFromInd_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Vmesh_Lin_SubFromD_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Vmesh_Lin_SubFromD_cython);
  PyList_SET_ITEM(__pyx_t_1, 23, __pyx_n_s_Ves_Vmesh_Lin_SubFromD_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Vmesh_Lin_SubFromInd_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Vmesh_Lin_SubFromInd_cython);
  PyList_SET_ITEM(__pyx_t_1, 24, __pyx_n_s_Ves_Vmesh_Lin_SubFromInd_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_Tor_SubFromD_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_Tor_SubFromD_cython);
  PyList_SET_ITEM(__pyx_t_1, 25, __pyx_n_s_Ves_Smesh_Tor_SubFromD_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_Tor_SubFromInd_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_Tor_SubFromInd_cython);
  PyList_SET_ITEM(__pyx_t_1, 26, __pyx_n_s_Ves_Smesh_Tor_SubFromInd_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_TorStruct_SubFromD_cy);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_TorStruct_SubFromD_cy);
  PyList_SET_ITEM(__pyx_t_1, 27, __pyx_n_s_Ves_Smesh_TorStruct_SubFromD_cy);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_TorStruct_SubFromInd);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_TorStruct_SubFromInd);
  PyList_SET_ITEM(__pyx_t_1, 28, __pyx_n_s_Ves_Smesh_TorStruct_SubFromInd);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_Lin_SubFromD_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_Lin_SubFromD_cython);
  PyList_SET_ITEM(__pyx_t_1, 29, __pyx_n_s_Ves_Smesh_Lin_SubFromD_cython);
  __Pyx_INCREF(__pyx_n_s_Ves_Smesh_Lin_SubFromInd_cython);
  __Pyx_GIVEREF(__pyx_n_s_Ves_Smesh_Lin_SubFromInd_cython);
  PyList_SET_ITEM(__pyx_t_1, 30, __pyx_n_s_Ves_Smesh_Lin_SubFromInd_cython);
  __Pyx_INCREF(__pyx_n_s_LOS_Calc_PInOut_VesStruct);
  __Pyx_GIVEREF(__pyx_n_s_LOS_Calc_PInOut_VesStruct);
  PyList_SET_ITEM(__pyx_t_1, 31, __pyx_n_s_LOS_Calc_PInOut_VesStruct);
  __Pyx_INCREF(__pyx_n_s_SLOW_LOS_Calc_PInOut_VesStruct);
  __Pyx_GIVEREF(__pyx_n_s_SLOW_LOS_Calc_PInOut_VesStruct);
  PyList_SET_ITEM(__pyx_t_1, 32, __pyx_n_s_SLOW_LOS_Calc_PInOut_VesStruct);
  __Pyx_INCREF(__pyx_n_s_LOS_isVis_PtFromPts_VesStruct);
  __Pyx_GIVEREF(__pyx_n_s_LOS_isVis_PtFromPts_VesStruct);
  PyList_SET_ITEM(__pyx_t_1, 33, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct);
  __Pyx_INCREF(__pyx_n_s_check_ff);
  __Pyx_GIVEREF(__pyx_n_s_check_ff);
  PyList_SET_ITEM(__pyx_t_1, 34, __pyx_n_s_check_ff);
  __Pyx_INCREF(__pyx_n_s_LOS_get_sample);
  __Pyx_GIVEREF(__pyx_n_s_LOS_get_sample);
  PyList_SET_ITEM(__pyx_t_1, 35, __pyx_n_s_LOS_get_sample);
  __Pyx_INCREF(__pyx_n_s_LOS_calc_signal);
  __Pyx_GIVEREF(__pyx_n_s_LOS_calc_signal);
  PyList_SET_ITEM(__pyx_t_1, 36, __pyx_n_s_LOS_calc_signal);
  __Pyx_INCREF(__pyx_n_s_LOS_sino);
  __Pyx_GIVEREF(__pyx_n_s_LOS_sino);
  PyList_SET_ITEM(__pyx_t_1, 37, __pyx_n_s_LOS_sino);
  __Pyx_INCREF(__pyx_n_s_integrate1d);
  __Pyx_GIVEREF(__pyx_n_s_integrate1d);
  PyList_SET_ITEM(__pyx_t_1, 38, __pyx_n_s_integrate1d);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_all_2, __pyx_t_1) < 0) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0035:            "comp_dist_los_circle",
 0036:            "comp_dist_los_circle_vec",
 0037:            "comp_dist_los_vpoly",
 0038:            "comp_dist_los_vpoly_vec",
 0039:            "is_close_los_vpoly_vec",
 0040:            "is_close_los_circle",
 0041:            "is_close_los_circle_vec",
 0042:            "which_los_closer_vpoly_vec",
 0043:            "which_vpoly_closer_los_vec",
 0044:            "LOS_sino_findRootkPMin_Tor",
 0045:            'Poly_isClockwise', 'Poly_Order', 'Poly_VolAngTor',
 0046:            'Sino_ImpactEnv', 'ConvertImpact_Theta2Xi',
 0047:            '_Ves_isInside',
 0048:            '_Ves_mesh_dlfromL_cython',
 0049:            '_Ves_meshCross_FromD', '_Ves_meshCross_FromInd', '_Ves_Smesh_Cross',
 0050:            '_Ves_Vmesh_Tor_SubFromD_cython', '_Ves_Vmesh_Tor_SubFromInd_cython',
 0051:            '_Ves_Vmesh_Lin_SubFromD_cython', '_Ves_Vmesh_Lin_SubFromInd_cython',
 0052:            '_Ves_Smesh_Tor_SubFromD_cython', '_Ves_Smesh_Tor_SubFromInd_cython',
 0053:            '_Ves_Smesh_TorStruct_SubFromD_cython',
 0054:            '_Ves_Smesh_TorStruct_SubFromInd_cython',
 0055:            '_Ves_Smesh_Lin_SubFromD_cython',
 0056:            '_Ves_Smesh_Lin_SubFromInd_cython',
 0057:            'LOS_Calc_PInOut_VesStruct',
 0058:            'SLOW_LOS_Calc_PInOut_VesStruct',
 0059:            'LOS_isVis_PtFromPts_VesStruct',
 0060:            'check_ff', 'LOS_get_sample', 'LOS_calc_signal',
 0061:            'LOS_sino','integrate1d']
 0062: 
 0063: 
 0064: ########################################################
 0065: ########################################################
 0066: #       Coordinates handling
 0067: ########################################################
 0068: 
+0069: def CoordShift(Pts, In='(X,Y,Z)', Out='(R,Z)', CrossRef=None):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_1CoordShift(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_CoordShift[] = " Check the shape of an array of points coordinates and/or converts from\n    2D to 3D, 3D to 2D, cylindrical to cartesian...\n    (CrossRef is an angle (Tor) or a distance (X for Lin))\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_1CoordShift = {"CoordShift", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_1CoordShift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_CoordShift};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_1CoordShift(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_Pts = 0;
  PyObject *__pyx_v_In = 0;
  PyObject *__pyx_v_Out = 0;
  PyObject *__pyx_v_CrossRef = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CoordShift (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Pts,&__pyx_n_s_In,&__pyx_n_s_Out,&__pyx_n_s_CrossRef,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)__pyx_kp_s_X_Y_Z);
    values[2] = ((PyObject *)__pyx_kp_s_R_Z);
    values[3] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Pts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_In);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_CrossRef);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "CoordShift") < 0)) __PYX_ERR(0, 69, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_Pts = values[0];
    __pyx_v_In = values[1];
    __pyx_v_Out = values[2];
    __pyx_v_CrossRef = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("CoordShift", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 69, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.CoordShift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_CoordShift(__pyx_self, __pyx_v_Pts, __pyx_v_In, __pyx_v_Out, __pyx_v_CrossRef);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_CoordShift(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_Pts, PyObject *__pyx_v_In, PyObject *__pyx_v_Out, PyObject *__pyx_v_CrossRef) {
  PyObject *__pyx_v_okTypes = NULL;
  PyObject *__pyx_v_Ins = NULL;
  PyObject *__pyx_v_Outs = NULL;
  PyObject *__pyx_v_InT = NULL;
  PyObject *__pyx_v_OutT = NULL;
  PyObject *__pyx_v_ndim = NULL;
  PyObject *__pyx_v_pts = NULL;
  PyObject *__pyx_v_ii = NULL;
  PyObject *__pyx_v_ff = NULL;
  PyObject *__pyx_v_ss = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CoordShift", 0);
  __Pyx_INCREF(__pyx_v_Pts);
  __Pyx_INCREF(__pyx_v_In);
  __Pyx_INCREF(__pyx_v_Out);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("tofu.geom._GG03.CoordShift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_okTypes);
  __Pyx_XDECREF(__pyx_v_Ins);
  __Pyx_XDECREF(__pyx_v_Outs);
  __Pyx_XDECREF(__pyx_v_InT);
  __Pyx_XDECREF(__pyx_v_OutT);
  __Pyx_XDECREF(__pyx_v_ndim);
  __Pyx_XDECREF(__pyx_v_pts);
  __Pyx_XDECREF(__pyx_v_ii);
  __Pyx_XDECREF(__pyx_v_ff);
  __Pyx_XDECREF(__pyx_v_ss);
  __Pyx_XDECREF(__pyx_v_Pts);
  __Pyx_XDECREF(__pyx_v_In);
  __Pyx_XDECREF(__pyx_v_Out);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__158 = PyTuple_Pack(14, __pyx_n_s_Pts, __pyx_n_s_In, __pyx_n_s_Out, __pyx_n_s_CrossRef, __pyx_n_s_okTypes, __pyx_n_s_Ins, __pyx_n_s_Outs, __pyx_n_s_InT, __pyx_n_s_OutT, __pyx_n_s_ndim, __pyx_n_s_pts, __pyx_n_s_ii, __pyx_n_s_ff, __pyx_n_s_ss); if (unlikely(!__pyx_tuple__158)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__158);
  __Pyx_GIVEREF(__pyx_tuple__158);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_1CoordShift, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_CoordShift, __pyx_t_1) < 0) __PYX_ERR(0, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__159 = (PyObject*)__Pyx_PyCode_New(4, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__158, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_CoordShift, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__159)) __PYX_ERR(0, 69, __pyx_L1_error)
 0070:     """ Check the shape of an array of points coordinates and/or converts from
 0071:     2D to 3D, 3D to 2D, cylindrical to cartesian...
 0072:     (CrossRef is an angle (Tor) or a distance (X for Lin))
 0073:     """
+0074:     assert all([type(ff) is str and ',' in ff for ff in [In,Out]]), (
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_In);
    __Pyx_GIVEREF(__pyx_v_In);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_In);
    __Pyx_INCREF(__pyx_v_Out);
    __Pyx_GIVEREF(__pyx_v_Out);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_Out);
    __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (__pyx_t_4 >= 2) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 74, __pyx_L1_error)
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_ff, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_ff)) == ((PyObject *)(&PyString_Type)));
      if (__pyx_t_5) {
      } else {
        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_2 = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_ff, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 74, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      __pyx_L5_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 74, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 74, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_In_and_Out_coordinate_format);
      __PYX_ERR(0, 74, __pyx_L1_error)
    }
  }
  #endif
 0075:         "Arg In and Out (coordinate format) must be comma-separated  !")
+0076:     assert type(Pts) is np.ndarray and Pts.ndim in [1,2] and \
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_7 = (((PyObject *)Py_TYPE(__pyx_v_Pts)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
    __pyx_t_8 = (__pyx_t_7 != 0);
    if (__pyx_t_8) {
    } else {
      __pyx_t_5 = __pyx_t_8;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_3, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 76, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!__pyx_t_7) {
    } else {
      __pyx_t_8 = __pyx_t_7;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_3, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 76, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = __pyx_t_7;
    __pyx_L10_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_5 = __pyx_t_7;
      goto __pyx_L7_bool_binop_done;
    }
+0077:         Pts.shape[0] in (2,3), ("Points must be a 1D or 2D np.ndarray "
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!__pyx_t_8) {
    } else {
      __pyx_t_7 = __pyx_t_8;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 77, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = __pyx_t_8;
    __pyx_L12_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = (__pyx_t_7 != 0);
    __pyx_t_5 = __pyx_t_8;
    __pyx_L7_bool_binop_done:;
    if (unlikely(!__pyx_t_5)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Points_must_be_a_1D_or_2D_np_nda);
      __PYX_ERR(0, 76, __pyx_L1_error)
    }
  }
  #endif
 0078:                                 "of 2 or 3 coordinates !")
+0079:     okTypes = [int,float,np.int64,np.float64]
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)(&PyInt_Type)));
  __Pyx_GIVEREF(((PyObject *)(&PyInt_Type)));
  PyList_SET_ITEM(__pyx_t_1, 0, ((PyObject *)(&PyInt_Type)));
  __Pyx_INCREF(((PyObject *)(&PyFloat_Type)));
  __Pyx_GIVEREF(((PyObject *)(&PyFloat_Type)));
  PyList_SET_ITEM(__pyx_t_1, 1, ((PyObject *)(&PyFloat_Type)));
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_1, 3, __pyx_t_2);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_v_okTypes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+0080:     assert CrossRef is None or type(CrossRef) in okTypes, (
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_8 = (__pyx_v_CrossRef == Py_None);
    __pyx_t_7 = (__pyx_t_8 != 0);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_5 = __pyx_t_7;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_7 = (__Pyx_PySequence_ContainsTF(((PyObject *)Py_TYPE(__pyx_v_CrossRef)), __pyx_v_okTypes, Py_EQ)); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 80, __pyx_L1_error)
    __pyx_t_8 = (__pyx_t_7 != 0);
    __pyx_t_5 = __pyx_t_8;
    __pyx_L14_bool_binop_done:;
    if (unlikely(!__pyx_t_5)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_CrossRef_must_be_a_float);
      __PYX_ERR(0, 80, __pyx_L1_error)
    }
  }
  #endif
 0081:         "Arg CrossRef must be a float !")
 0082: 
 0083:     # Pre-format inputs
+0084:     In, Out = In.lower(), Out.lower()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_In, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Out, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_In, __pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_Out, __pyx_t_2);
  __pyx_t_2 = 0;
 0085: 
 0086:     # Get order
+0087:     Ins = In.replace('(','').replace(')','').split(',')
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_In, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_kp_s__2, __pyx_kp_s__3); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_s_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Ins = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_tuple__6 = PyTuple_Pack(2, __pyx_kp_s__5, __pyx_kp_s__3); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);
+0088:     Outs = Out.replace('(','').replace(')','').split(',')
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Out, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_kp_s_) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_kp_s_);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Outs = __pyx_t_2;
  __pyx_t_2 = 0;
 0089:     # TODO: @DV > it looks to me that (x, r, phi) could be a valid in/out-put
 0090:     # >>>>> ajouter assert pour le moment
+0091:     assert all([ss in ['x','y','z','r','phi'] for ss in Ins]), "Non-valid In!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (likely(PyList_CheckExact(__pyx_v_Ins)) || PyTuple_CheckExact(__pyx_v_Ins)) {
      __pyx_t_1 = __pyx_v_Ins; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_Ins); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_9 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 91, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_9(__pyx_t_1);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 91, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_v_ss);
      __pyx_t_3 = __pyx_v_ss;
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_x, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_y, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_z, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_phi, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
      __pyx_t_5 = __pyx_t_8;
      __pyx_L18_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 91, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 91, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_5)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Non_valid_In);
      __PYX_ERR(0, 91, __pyx_L1_error)
    }
  }
  #endif
+0092:     assert all([ss in ['x','y','z','r','phi'] for ss in Outs]), "Non-valid Out!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_Outs)) || PyTuple_CheckExact(__pyx_v_Outs)) {
      __pyx_t_2 = __pyx_v_Outs; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_Outs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_9 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 92, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_9(__pyx_t_2);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 92, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_INCREF(__pyx_v_ss);
      __pyx_t_3 = __pyx_v_ss;
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_x, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_y, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_z, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      if (!__pyx_t_8) {
      } else {
        __pyx_t_5 = __pyx_t_8;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_phi, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
      __pyx_t_5 = __pyx_t_8;
      __pyx_L25_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 92, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 92, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Non_valid_Out);
      __PYX_ERR(0, 92, __pyx_L1_error)
    }
  }
  #endif
+0093:     InT = 'cyl' if any([ss in Ins for ss in ['r','phi']]) else 'cart'
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_tuple__7; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= 2) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
    #else
    __pyx_t_6 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 93, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 93, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 93, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_5) {
    __Pyx_INCREF(__pyx_n_s_cyl);
    __pyx_t_2 = __pyx_n_s_cyl;
  } else {
    __Pyx_INCREF(__pyx_n_s_cart);
    __pyx_t_2 = __pyx_n_s_cart;
  }
  __pyx_v_InT = __pyx_t_2;
  __pyx_t_2 = 0;
/* … */
  __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_r, __pyx_n_s_phi); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
+0094:     OutT = 'cyl' if any([ss in Outs for ss in ['r','phi']]) else 'cart'
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __pyx_tuple__7; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
  for (;;) {
    if (__pyx_t_4 >= 2) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_6); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 94, __pyx_L1_error)
    #else
    __pyx_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Outs, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 94, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 94, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 94, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
    __Pyx_INCREF(__pyx_n_s_cyl);
    __pyx_t_2 = __pyx_n_s_cyl;
  } else {
    __Pyx_INCREF(__pyx_n_s_cart);
    __pyx_t_2 = __pyx_n_s_cart;
  }
  __pyx_v_OutT = __pyx_t_2;
  __pyx_t_2 = 0;
 0095: 
+0096:     ndim = Pts.ndim
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_ndim = __pyx_t_2;
  __pyx_t_2 = 0;
+0097:     if ndim==1:
  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_v_ndim, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 97, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_5) {
/* … */
  }
+0098:         Pts = np.copy(Pts.reshape((Pts.shape[0],1)))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_reshape); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_10, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);
    __Pyx_INCREF(__pyx_int_1);
    __Pyx_GIVEREF(__pyx_int_1);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_int_1);
    __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 98, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_Pts, __pyx_t_2);
    __pyx_t_2 = 0;
 0099: 
 0100:     # Compute
+0101:     if InT==OutT:
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_InT, __pyx_v_OutT, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 101, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L35;
  }
+0102:         assert all([ss in Ins for ss in Outs])
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 102, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (likely(PyList_CheckExact(__pyx_v_Outs)) || PyTuple_CheckExact(__pyx_v_Outs)) {
        __pyx_t_3 = __pyx_v_Outs; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
        __pyx_t_9 = NULL;
      } else {
        __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_Outs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 102, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_9)) {
          if (likely(PyList_CheckExact(__pyx_t_3))) {
            if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 102, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          } else {
            if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 102, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
          }
        } else {
          __pyx_t_1 = __pyx_t_9(__pyx_t_3);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 102, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_1);
        }
        __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 102, __pyx_L1_error)
        __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 102, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 102, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 102, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 102, __pyx_L1_error)
      }
    }
    #endif
+0103:         pts = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_pts = __pyx_t_3;
    __pyx_t_3 = 0;
+0104:         for ii in Outs:
    if (likely(PyList_CheckExact(__pyx_v_Outs)) || PyTuple_CheckExact(__pyx_v_Outs)) {
      __pyx_t_3 = __pyx_v_Outs; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_Outs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 104, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 104, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 104, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_9(__pyx_t_3);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 104, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0105:             if ii=='phi':
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_phi, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 105, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
        goto __pyx_L40;
      }
 0106:                 # TODO : @DV > why ? no need of transform
 0107:                 # >>> ts les angles entre [-pi, pi] -> ajouter un if ?
+0108:                 pts.append(np.arctan2(np.sin(Pts[Ins.index(ii),:]),
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_arctan2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_sin); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_13 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
          }
        }
        __pyx_t_10 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_v_ii) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_ii);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_slice__8);
        __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
          }
        }
        __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_2); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 108, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_slice__8 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__8)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
+0109:                                       np.cos(Pts[Ins.index(ii),:])))
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_cos); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_13, function);
          }
        }
        __pyx_t_10 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_v_ii) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_v_ii);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_10);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_slice__8);
        __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_13 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_13)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_13);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
          }
        }
        __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = NULL;
        __pyx_t_15 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_15 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_1, __pyx_t_11};
          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_1, __pyx_t_11};
          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        {
          __pyx_t_10 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (__pyx_t_12) {
            __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_15, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_15, __pyx_t_11);
          __pyx_t_1 = 0;
          __pyx_t_11 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0110:             else:
+0111:                 pts.append(Pts[Ins.index(ii),:])
      /*else*/ {
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_10, __pyx_v_ii) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_ii);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 111, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice__8);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 111, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_2); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 111, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __pyx_L40:;
+0112:     elif InT=='cart':
  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_InT, __pyx_n_s_cart, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 112, __pyx_L1_error)
  if (__pyx_t_5) {
/* … */
    goto __pyx_L35;
  }
+0113:         pts = []
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_pts = __pyx_t_3;
    __pyx_t_3 = 0;
+0114:         for ii in Outs:
    if (likely(PyList_CheckExact(__pyx_v_Outs)) || PyTuple_CheckExact(__pyx_v_Outs)) {
      __pyx_t_3 = __pyx_v_Outs; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_Outs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 114, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 114, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 114, __pyx_L1_error)
          #else
          __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          #endif
        }
      } else {
        __pyx_t_2 = __pyx_t_9(__pyx_t_3);
        if (unlikely(!__pyx_t_2)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 114, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0115:             if ii=='r':
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 115, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
        goto __pyx_L43;
      }
+0116:                 assert all([ss in Ins for ss in ['x','y']])
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __pyx_tuple__9; __Pyx_INCREF(__pyx_t_6); __pyx_t_17 = 0;
          for (;;) {
            if (__pyx_t_17 >= 2) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_17); __Pyx_INCREF(__pyx_t_10); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 116, __pyx_L1_error)
            #else
            __pyx_t_10 = PySequence_ITEM(__pyx_t_6, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 116, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            #endif
            __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_10);
            __pyx_t_10 = 0;
            __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 116, __pyx_L1_error)
            __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 116, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 116, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 116, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 116, __pyx_L1_error)
          }
        }
        #endif
/* … */
  __pyx_tuple__9 = PyTuple_Pack(2, __pyx_n_s_x, __pyx_n_s_y); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
+0117:                 pts.append(np.hypot(Pts[Ins.index('x'),:],
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_hypot); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_11, function);
          }
        }
        __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_1, __pyx_n_s_x) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_n_s_x);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_slice__8);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_6); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 117, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0118:                                     Pts[Ins.index('y'),:]))
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_12 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_n_s_y) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_y);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 118, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_11);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_slice__8);
        __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 118, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        __pyx_t_15 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_15 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_2, __pyx_t_11};
          __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 117, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_2, __pyx_t_11};
          __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 117, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        } else
        #endif
        {
          __pyx_t_12 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (__pyx_t_1) {
            __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1); __pyx_t_1 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_15, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_15, __pyx_t_11);
          __pyx_t_2 = 0;
          __pyx_t_11 = 0;
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0119:             elif ii=='z':
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_z, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 119, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
        goto __pyx_L43;
      }
+0120:                 assert 'z' in Ins
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_z, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 120, __pyx_L1_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 120, __pyx_L1_error)
          }
        }
        #endif
+0121:                 pts.append(Pts[Ins.index('z'),:])
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_12 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_12)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_12, __pyx_n_s_z) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_n_s_z);
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_slice__8);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_6); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 121, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0122:             elif ii=='phi':
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_phi, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 122, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
      }
      __pyx_L43:;
+0123:                 if all([ss in Ins for ss in ['x','y']]):
        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 123, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_10 = __pyx_tuple__9; __Pyx_INCREF(__pyx_t_10); __pyx_t_17 = 0;
        for (;;) {
          if (__pyx_t_17 >= 2) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_17); __Pyx_INCREF(__pyx_t_12); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 123, __pyx_L1_error)
          #else
          __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 123, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          #endif
          __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 123, __pyx_L1_error)
          __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 123, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 123, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 123, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 123, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (__pyx_t_5) {
/* … */
          goto __pyx_L46;
        }
+0124:                     pts.append(np.arctan2(Pts[Ins.index('y'),:],
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_arctan2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_2, __pyx_n_s_y) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_n_s_y);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_slice__8);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
          __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_10); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 124, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+0125:                                           Pts[Ins.index('x'),:]))
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_11 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_n_s_x) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_s_x);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 125, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_slice__8);
          __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 125, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          __pyx_t_15 = 0;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
              __pyx_t_15 = 1;
            }
          }
          #if CYTHON_FAST_PYCALL
          if (PyFunction_Check(__pyx_t_12)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_11};
            __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 124, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          #if CYTHON_FAST_PYCCALL
          if (__Pyx_PyFastCFunction_Check(__pyx_t_12)) {
            PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_11};
            __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_12, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 124, __pyx_L1_error)
            __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          } else
          #endif
          {
            __pyx_t_1 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 124, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (__pyx_t_2) {
              __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
            }
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_15, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_11);
            PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_15, __pyx_t_11);
            __pyx_t_6 = 0;
            __pyx_t_11 = 0;
            __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 124, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0126:                 elif CrossRef is not None:
        __pyx_t_5 = (__pyx_v_CrossRef != Py_None);
        __pyx_t_8 = (__pyx_t_5 != 0);
        if (likely(__pyx_t_8)) {
/* … */
          goto __pyx_L46;
        }
+0127:                     pts.append( CrossRef*np.ones((Pts.shape[1],)) )
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_12, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_11 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_10 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_11, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_12);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyNumber_Multiply(__pyx_v_CrossRef, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 127, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0128:                 else:
+0129:                     raise Exception("There is no phi value available !")
        /*else*/ {
          __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_Raise(__pyx_t_1, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __PYX_ERR(0, 129, __pyx_L1_error)
        }
        __pyx_L46:;
/* … */
  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_There_is_no_phi_value_available); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);
 0130:                 # TODO: @VZ > else... ? if Outs = (x, r, phi) ?
 0131:     else:
+0132:         pts = []
  /*else*/ {
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_pts = __pyx_t_3;
    __pyx_t_3 = 0;
+0133:         for ii in Outs:
    if (likely(PyList_CheckExact(__pyx_v_Outs)) || PyTuple_CheckExact(__pyx_v_Outs)) {
      __pyx_t_3 = __pyx_v_Outs; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
      __pyx_t_9 = NULL;
    } else {
      __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_Outs); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 133, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 133, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_9)) {
        if (likely(PyList_CheckExact(__pyx_t_3))) {
          if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 133, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        } else {
          if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 133, __pyx_L1_error)
          #else
          __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          #endif
        }
      } else {
        __pyx_t_1 = __pyx_t_9(__pyx_t_3);
        if (unlikely(!__pyx_t_1)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 133, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_1);
      }
      __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_1);
      __pyx_t_1 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_L35:;
+0134:             if ii=='x':
      __pyx_t_8 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_x, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 134, __pyx_L1_error)
      if (__pyx_t_8) {
/* … */
        goto __pyx_L51;
      }
+0135:                 if all([ss in Ins for ss in ['r','phi']]) :
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = __pyx_tuple__7; __Pyx_INCREF(__pyx_t_10); __pyx_t_17 = 0;
        for (;;) {
          if (__pyx_t_17 >= 2) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_17); __Pyx_INCREF(__pyx_t_12); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 135, __pyx_L1_error)
          #else
          __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 135, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          #endif
          __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 135, __pyx_L1_error)
          __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 135, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 135, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 135, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 135, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (__pyx_t_8) {
/* … */
          goto __pyx_L52;
        }
 0136:                     # TODO : @VZ : and CrossRef is None ?
 0137:                     # >>> ajouter un warning si crossref a ete defini
+0138:                     pts.append(Pts[Ins.index('r'),:] *
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_12 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_10 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_n_s_r) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_r);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_slice__8);
          __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
          __pyx_t_11 = PyNumber_Multiply(__pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_11); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 138, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0139:                                np.cos(Pts[Ins.index('phi'),:]))
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_cos); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_6, function);
            }
          }
          __pyx_t_12 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_n_s_phi) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_n_s_phi);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_12);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice__8);
          __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_6); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_6)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_6);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_6, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_12);
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+0140:                 elif CrossRef is not None:
        __pyx_t_8 = (__pyx_v_CrossRef != Py_None);
        __pyx_t_5 = (__pyx_t_8 != 0);
        if (likely(__pyx_t_5)) {
/* … */
          goto __pyx_L52;
        }
+0141:                     pts.append( CrossRef*np.ones((Pts.shape[1],)) )
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_12 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_10, function);
            }
          }
          __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_12, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_1);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = PyNumber_Multiply(__pyx_v_CrossRef, __pyx_t_11); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_10); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 141, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 0142:                 else:
+0143:                     raise Exception("There is no x value available !")
        /*else*/ {
          __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 143, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_Raise(__pyx_t_10, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 143, __pyx_L1_error)
        }
        __pyx_L52:;
/* … */
  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_There_is_no_x_value_available); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);
+0144:             elif ii=='y':
      /* "tofu/geom/_GG03.pyx":144
 *                 else:
 *                     raise Exception("There is no x value available !")
 *             elif ii=='y':             # <<<<<<<<<<<<<<
 *                 assert all([ss in Ins for ss in ['r','phi']])
 *                 pts.append(Pts[Ins.index('r'),:] *
 */
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_y, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 144, __pyx_L1_error)
      if (__pyx_t_5) {

        /* "tofu/geom/_GG03.pyx":144
 *                 else:
 *                     raise Exception("There is no x value available !")
 *             elif ii=='y':             # <<<<<<<<<<<<<<
 *                 assert all([ss in Ins for ss in ['r','phi']])
 *                 pts.append(Pts[Ins.index('r'),:] *
 */
        goto __pyx_L51;
      }
+0145:                 assert all([ss in Ins for ss in ['r','phi']])
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 145, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_11 = __pyx_tuple__7; __Pyx_INCREF(__pyx_t_11); __pyx_t_17 = 0;
          for (;;) {
            if (__pyx_t_17 >= 2) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_17); __Pyx_INCREF(__pyx_t_1); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 145, __pyx_L1_error)
            #else
            __pyx_t_1 = PySequence_ITEM(__pyx_t_11, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            #endif
            __Pyx_XDECREF_SET(__pyx_v_ss, __pyx_t_1);
            __pyx_t_1 = 0;
            __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_ss, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 145, __pyx_L1_error)
            __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 145, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          }
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 145, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 145, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_5)) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 145, __pyx_L1_error)
          }
        }
        #endif
+0146:                 pts.append(Pts[Ins.index('r'),:] *
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_11 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_1, __pyx_n_s_r) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_n_s_r);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_slice__8);
        __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
        __pyx_t_12 = PyNumber_Multiply(__pyx_t_11, __pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_12); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 146, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0147:                            np.sin(Pts[Ins.index('phi'),:]))
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sin); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_2 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_n_s_phi) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_n_s_phi);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_slice__8);
        __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
          }
        }
        __pyx_t_10 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_1);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 147, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+0148:             elif ii=='z':
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_ii, __pyx_n_s_z, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 148, __pyx_L1_error)
      if (__pyx_t_5) {
/* … */
      }
      __pyx_L51:;
+0149:                 assert 'z' in Ins
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_z, __pyx_v_Ins, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 149, __pyx_L1_error)
          if (unlikely(!(__pyx_t_5 != 0))) {
            PyErr_SetNone(PyExc_AssertionError);
            __PYX_ERR(0, 149, __pyx_L1_error)
          }
        }
        #endif
+0150:                 pts.append(Pts[Ins.index('z'),:])
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ins, __pyx_n_s_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 150, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_12 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_n_s_z) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_n_s_z);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 150, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 150, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_slice__8);
        __pyx_t_12 = 0;
        __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_Pts, __pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 150, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_16 = __Pyx_PyObject_Append(__pyx_v_pts, __pyx_t_12); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 150, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 0151:                 # TODO : else....?
 0152: 
 0153:     # Format output
+0154:     pts = np.vstack(pts)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_vstack); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_3 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_12, __pyx_v_pts) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_pts);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF_SET(__pyx_v_pts, __pyx_t_3);
  __pyx_t_3 = 0;
+0155:     if ndim==1:
  __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_ndim, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 155, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_5) {
/* … */
  }
+0156:         pts = pts.flatten()
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_pts, __pyx_n_s_flatten); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_3 = (__pyx_t_12) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_12) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF_SET(__pyx_v_pts, __pyx_t_3);
    __pyx_t_3 = 0;
+0157:     return pts
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pts);
  __pyx_r = __pyx_v_pts;
  goto __pyx_L0;
 0158: 
 0159: 
 0160: """
 0161: ########################################################
 0162: ########################################################
 0163: ########################################################
 0164: #                  General Geometry
 0165: ########################################################
 0166: ########################################################
 0167: ########################################################
 0168: """
 0169: 
 0170: ########################################################
 0171: ########################################################
 0172: #       Polygons
 0173: ########################################################
 0174: 
 0175: 
 0176: @cython.cdivision(True)
 0177: @cython.wraparound(False)
 0178: @cython.boundscheck(False)
+0179: def Poly_isClockwise(np.ndarray[double,ndim=2] Poly):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_3Poly_isClockwise(PyObject *__pyx_self, PyObject *__pyx_v_Poly); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_2Poly_isClockwise[] = " Assuming 2D closed Poly !\n    TODO @LM :\n    http://www.faqs.org/faqs/graphics/algorithms-faq/\n    A slightly faster method is based on the observation that it isn't\n    necessary to compute the area.  Find the lowest vertex (or, if\n    there is more than one vertex with the same lowest coordinate,\n    the rightmost of those vertices) and then take the cross product\n    of the edges fore and aft of it.  Both methods are O(n) for n vertices,\n    but it does seem a waste to add up the total area when a single cross\n    product (of just the right edges) suffices.  Code for this is\n    available at ftp://cs.smith.edu/pub/code/polyorient.C (2K).\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_3Poly_isClockwise = {"Poly_isClockwise", (PyCFunction)__pyx_pw_4tofu_4geom_5_GG03_3Poly_isClockwise, METH_O, __pyx_doc_4tofu_4geom_5_GG03_2Poly_isClockwise};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_3Poly_isClockwise(PyObject *__pyx_self, PyObject *__pyx_v_Poly) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_isClockwise (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Poly), __pyx_ptype_5numpy_ndarray, 1, "Poly", 0))) __PYX_ERR(0, 179, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_2Poly_isClockwise(__pyx_self, ((PyArrayObject *)__pyx_v_Poly));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_2Poly_isClockwise(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_Poly) {
  int __pyx_v_ii;
  int __pyx_v_NP;
  double __pyx_v_Sum;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Poly;
  __Pyx_Buffer __pyx_pybuffer_Poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_isClockwise", 0);
  __pyx_pybuffer_Poly.pybuffer.buf = NULL;
  __pyx_pybuffer_Poly.refcount = 0;
  __pyx_pybuffernd_Poly.data = NULL;
  __pyx_pybuffernd_Poly.rcbuffer = &__pyx_pybuffer_Poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_Poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 179, __pyx_L1_error)
  }
  __pyx_pybuffernd_Poly.diminfo[0].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Poly.diminfo[0].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Poly.diminfo[1].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Poly.diminfo[1].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_12);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Poly_isClockwise", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__160 = PyTuple_Pack(4, __pyx_n_s_Poly, __pyx_n_s_ii, __pyx_n_s_NP, __pyx_n_s_Sum); if (unlikely(!__pyx_tuple__160)) __PYX_ERR(0, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__160);
  __Pyx_GIVEREF(__pyx_tuple__160);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_3Poly_isClockwise, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Poly_isClockwise, __pyx_t_1) < 0) __PYX_ERR(0, 179, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Poly_isClockwise, 179, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) __PYX_ERR(0, 179, __pyx_L1_error)
 0180:     """ Assuming 2D closed Poly !
 0181:     TODO @LM :
 0182:     http://www.faqs.org/faqs/graphics/algorithms-faq/
 0183:     A slightly faster method is based on the observation that it isn't
 0184:     necessary to compute the area.  Find the lowest vertex (or, if
 0185:     there is more than one vertex with the same lowest coordinate,
 0186:     the rightmost of those vertices) and then take the cross product
 0187:     of the edges fore and aft of it.  Both methods are O(n) for n vertices,
 0188:     but it does seem a waste to add up the total area when a single cross
 0189:     product (of just the right edges) suffices.  Code for this is
 0190:     available at ftp://cs.smith.edu/pub/code/polyorient.C (2K).
 0191:     """
+0192:     cdef int ii, NP=Poly.shape[1]
  __pyx_v_NP = (__pyx_v_Poly->dimensions[1]);
+0193:     cdef double Sum=0.
  __pyx_v_Sum = 0.;
+0194:     for ii in range(0,NP-1):
  __pyx_t_1 = (__pyx_v_NP - 1);
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
 0195:         # Slightly faster solution: (to check)  and try above solution ?
 0196:         # TODO : @LM > Test on of this sols:
 0197:         # Sol 1 (unit test time = 2.7)
 0198:         # Sum += (Poly[0,ii+1]-Poly[0,ii])*(Poly[1,ii+1]+Poly[1,ii])
 0199:         # Sol 2 (unit test time = 1.9)
 0200:         #     p1 = [0, 0]
 0201:         # p2 = [1, 0]
 0202:         # p3 = [.5, .5]
 0203:         # p4 = [1, 1]
 0204:         # p5 = [0,1]
 0205:         # p6 = [0,0]
 0206:         # points = [p1, p2, p3, p4, p5, p6]
 0207:         # idmin = points.index(min(points)) #0.99
 0208:         # idm1 = idmin - 1
 0209:         # idp1 = idmin + 1 % 7
 0210:         # res = points[idm1][0] * (points[idmin][1] - points[idp1][1]) + \
 0211:         #   points[idmin][0] * (points[idp1][1] - points[idm1][1]) + \
 0212:         #   points[idp1][0] * (points[idm1][1] - points[idmin][1])
 0213:         # Sol DV (unit test time = 2.9)
+0214:         Sum += Poly[0,ii]*Poly[1,ii+1]-Poly[0,ii+1]*Poly[1,ii]
    __pyx_t_4 = 0;
    __pyx_t_5 = __pyx_v_ii;
    __pyx_t_6 = 1;
    __pyx_t_7 = (__pyx_v_ii + 1);
    __pyx_t_8 = 0;
    __pyx_t_9 = (__pyx_v_ii + 1);
    __pyx_t_10 = 1;
    __pyx_t_11 = __pyx_v_ii;
    __pyx_v_Sum = (__pyx_v_Sum + (((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Poly.rcbuffer->pybuffer.buf, __pyx_t_4, __pyx_pybuffernd_Poly.diminfo[0].strides, __pyx_t_5, __pyx_pybuffernd_Poly.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Poly.rcbuffer->pybuffer.buf, __pyx_t_6, __pyx_pybuffernd_Poly.diminfo[0].strides, __pyx_t_7, __pyx_pybuffernd_Poly.diminfo[1].strides))) - ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Poly.rcbuffer->pybuffer.buf, __pyx_t_8, __pyx_pybuffernd_Poly.diminfo[0].strides, __pyx_t_9, __pyx_pybuffernd_Poly.diminfo[1].strides)) * (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Poly.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_Poly.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_Poly.diminfo[1].strides)))));
  }
+0215:     return Sum < 0.
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12 = __Pyx_PyBool_FromLong((__pyx_v_Sum < 0.)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_r = __pyx_t_12;
  __pyx_t_12 = 0;
  goto __pyx_L0;
 0216: 
 0217: 
+0218: def Poly_Order(np.ndarray[double,ndim=2] Poly, str order='C', Clock=False,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_5Poly_Order(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_4Poly_Order[] = "\n    Return a polygon Poly as a np.ndarray formatted according to parameters\n\n    Parameters\n    ----------\n        Poly    np.ndarray or list    Input polygon under from of (cc,N) or\n                or tuple              (N,cc) np.ndarray (where cc = 2 or 3, the\n                                      number of coordinates and N points), or\n                                      list or tuple of vertices\n        order   str                   Flag indicating whether the output\n                                      np.ndarray shall be C-contiguous ('C') or\n                                      Fortran-contiguous ('F')\n        Clock   bool                  For 2-dimensional arrays only, flag indi-\n                                      cating whether the output array shall\n                                      represent a clockwise polygon (True) or\n                                      anti-clockwise (False), or should be left\n                                      unchanged (None)\n        close   bool                  For 2-dimensional arrays only, flag indi-\n                                      cating whether the output array shall be\n                                      closed (True, ie: last point==first point)\n                                      or not closed (False)\n        layout  str                   Flag indicating whether the output\n                                      np.ndarray shall be of shape '(cc,N)'\n                                      or '(N,cc)'\n        Test    bool                  Flag indicating whether the inputs should\n                                      be tested for conformity, default: True\n\n    Returns\n    -------\n        poly    np.ndarray            Output formatted polygon\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_5Poly_Order = {"Poly_Order", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_5Poly_Order, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_4Poly_Order};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_5Poly_Order(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_Poly = 0;
  PyObject *__pyx_v_order = 0;
  PyObject *__pyx_v_Clock = 0;
  PyObject *__pyx_v_close = 0;
  PyObject *__pyx_v_layout = 0;
  PyObject *__pyx_v_layout_in = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_Order (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Poly,&__pyx_n_s_order,&__pyx_n_s_Clock,&__pyx_n_s_close,&__pyx_n_s_layout,&__pyx_n_s_layout_in,&__pyx_n_s_Test,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[1] = ((PyObject*)__pyx_n_s_C);
    values[2] = ((PyObject *)Py_False);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_4Poly_Order(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_Poly, PyObject *__pyx_v_order, PyObject *__pyx_v_Clock, PyObject *__pyx_v_close, PyObject *__pyx_v_layout, PyObject *__pyx_v_layout_in, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_poly = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Poly;
  __Pyx_Buffer __pyx_pybuffer_Poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_Order", 0);
  __pyx_pybuffer_Poly.pybuffer.buf = NULL;
  __pyx_pybuffer_Poly.refcount = 0;
  __pyx_pybuffernd_Poly.data = NULL;
  __pyx_pybuffernd_Poly.rcbuffer = &__pyx_pybuffer_Poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_Poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 218, __pyx_L1_error)
  }
  __pyx_pybuffernd_Poly.diminfo[0].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Poly.diminfo[0].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Poly.diminfo[1].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Poly.diminfo[1].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Poly_Order", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_poly);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__162 = PyTuple_Pack(8, __pyx_n_s_Poly, __pyx_n_s_order, __pyx_n_s_Clock, __pyx_n_s_close, __pyx_n_s_layout, __pyx_n_s_layout_in, __pyx_n_s_Test, __pyx_n_s_poly); if (unlikely(!__pyx_tuple__162)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__162);
  __Pyx_GIVEREF(__pyx_tuple__162);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_5Poly_Order, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Poly_Order, __pyx_t_1) < 0) __PYX_ERR(0, 218, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__163 = (PyObject*)__Pyx_PyCode_New(7, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__162, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Poly_Order, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__163)) __PYX_ERR(0, 218, __pyx_L1_error)
+0219:                close=True, str layout='(cc,N)', str layout_in=None, Test=True):
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject*)__pyx_kp_s_cc_N);
    values[5] = ((PyObject*)Py_None);
    values[6] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Poly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_order);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Clock);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_close);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_layout);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_layout_in);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Poly_Order") < 0)) __PYX_ERR(0, 218, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_Poly = ((PyArrayObject *)values[0]);
    __pyx_v_order = ((PyObject*)values[1]);
    __pyx_v_Clock = values[2];
    __pyx_v_close = values[3];
    __pyx_v_layout = ((PyObject*)values[4]);
    __pyx_v_layout_in = ((PyObject*)values[5]);
    __pyx_v_Test = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Poly_Order", 0, 1, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 218, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.Poly_Order", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Poly), __pyx_ptype_5numpy_ndarray, 1, "Poly", 0))) __PYX_ERR(0, 218, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_order), (&PyString_Type), 1, "order", 1))) __PYX_ERR(0, 218, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_layout), (&PyString_Type), 1, "layout", 1))) __PYX_ERR(0, 219, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_layout_in), (&PyString_Type), 1, "layout_in", 1))) __PYX_ERR(0, 219, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_4Poly_Order(__pyx_self, __pyx_v_Poly, __pyx_v_order, __pyx_v_Clock, __pyx_v_close, __pyx_v_layout, __pyx_v_layout_in, __pyx_v_Test);
 0220:     """
 0221:     Return a polygon Poly as a np.ndarray formatted according to parameters
 0222: 
 0223:     Parameters
 0224:     ----------
 0225:         Poly    np.ndarray or list    Input polygon under from of (cc,N) or
 0226:                 or tuple              (N,cc) np.ndarray (where cc = 2 or 3, the
 0227:                                       number of coordinates and N points), or
 0228:                                       list or tuple of vertices
 0229:         order   str                   Flag indicating whether the output
 0230:                                       np.ndarray shall be C-contiguous ('C') or
 0231:                                       Fortran-contiguous ('F')
 0232:         Clock   bool                  For 2-dimensional arrays only, flag indi-
 0233:                                       cating whether the output array shall
 0234:                                       represent a clockwise polygon (True) or
 0235:                                       anti-clockwise (False), or should be left
 0236:                                       unchanged (None)
 0237:         close   bool                  For 2-dimensional arrays only, flag indi-
 0238:                                       cating whether the output array shall be
 0239:                                       closed (True, ie: last point==first point)
 0240:                                       or not closed (False)
 0241:         layout  str                   Flag indicating whether the output
 0242:                                       np.ndarray shall be of shape '(cc,N)'
 0243:                                       or '(N,cc)'
 0244:         Test    bool                  Flag indicating whether the inputs should
 0245:                                       be tested for conformity, default: True
 0246: 
 0247:     Returns
 0248:     -------
 0249:         poly    np.ndarray            Output formatted polygon
 0250:     """
+0251:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 251, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0252:         assert (2 in np.shape(Poly) or 3 in np.shape(Poly)), \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_int_2, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (!__pyx_t_6) {
      } else {
        __pyx_t_1 = __pyx_t_6;
        goto __pyx_L4_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = (__Pyx_PySequence_ContainsTF(__pyx_int_3, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 252, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = (__pyx_t_6 != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Poly_must_contain_the_2D_or);
        __PYX_ERR(0, 252, __pyx_L1_error)
      }
    }
    #endif
 0253:           "Arg Poly must contain the 2D or 3D coordinates of at least 3 points!"
+0254:         assert max(np.shape(Poly))>=3, ("Arg Poly must contain the 2D or 3D",
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_max, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_4, __pyx_int_3, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) {
/* … */
  __pyx_tuple__12 = PyTuple_Pack(2, __pyx_kp_s_Arg_Poly_must_contain_the_2D_or_2, __pyx_kp_s_coordinates_of_at_least_3_point); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
        PyErr_SetObject(PyExc_AssertionError, __pyx_tuple__13);
        __PYX_ERR(0, 254, __pyx_L1_error)
      }
    }
    #endif
  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_tuple__12); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__13);
  __Pyx_GIVEREF(__pyx_tuple__13);
 0255:                                         " coordinates of at least 3 points!")
+0256:         assert order.lower() in ['c','f'], "Arg order must be in ['c','f']!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_order); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 256, __pyx_L1_error)
      if (!__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_f, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 256, __pyx_L1_error)
      __pyx_t_1 = __pyx_t_5;
      __pyx_L6_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_order_must_be_in_c_f);
        __PYX_ERR(0, 256, __pyx_L1_error)
      }
    }
    #endif
+0257:         assert type(Clock) is bool, "Arg Clock must be a bool!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_Clock)) == ((PyObject *)__pyx_ptype_7cpython_4bool_bool));
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Clock_must_be_a_bool);
        __PYX_ERR(0, 257, __pyx_L1_error)
      }
    }
    #endif
+0258:         assert type(close) is bool, "Arg close must be a bool!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_close)) == ((PyObject *)__pyx_ptype_7cpython_4bool_bool));
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_close_must_be_a_bool);
        __PYX_ERR(0, 258, __pyx_L1_error)
      }
    }
    #endif
+0259:         assert layout.lower() in ['(cc,n)','(n,cc)'], \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_layout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_cc_n, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 259, __pyx_L1_error)
      if (!__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_n_cc, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 259, __pyx_L1_error)
      __pyx_t_1 = __pyx_t_5;
      __pyx_L8_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_layout_must_be_in_cc_n_n_cc);
        __PYX_ERR(0, 259, __pyx_L1_error)
      }
    }
    #endif
 0260:           "Arg layout must be in ['(cc,n)','(n,cc)']!"
+0261:         assert layout_in is None or layout_in.lower() in ['(cc,n)','(n,cc)'],\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = (__pyx_v_layout_in == ((PyObject*)Py_None));
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (!__pyx_t_6) {
      } else {
        __pyx_t_1 = __pyx_t_6;
        goto __pyx_L10_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_layout_in); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_cc_n, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 261, __pyx_L1_error)
      if (!__pyx_t_5) {
      } else {
        __pyx_t_6 = __pyx_t_5;
        goto __pyx_L12_bool_binop_done;
      }
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_n_cc, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 261, __pyx_L1_error)
      __pyx_t_6 = __pyx_t_5;
      __pyx_L12_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = (__pyx_t_6 != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L10_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_layout_in_must_be_None_or_in);
        __PYX_ERR(0, 261, __pyx_L1_error)
      }
    }
    #endif
 0262:           "Arg layout_in must be None or in ['(cc,n)','(n,cc)']!"
 0263: 
+0264:     if np.shape(Poly)==(3,3):
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_Poly));
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_tuple__14, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {
/* … */
  __pyx_tuple__14 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_3); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);
/* … */
    goto __pyx_L14;
  }
+0265:         assert not layout_in is None, \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = (__pyx_v_layout_in != ((PyObject*)Py_None));
      if (unlikely(!(__pyx_t_1 != 0))) {
+0266:           ("Could not resolve the input layout of Poly because shape==(3,3)",
  __pyx_tuple__15 = PyTuple_Pack(2, __pyx_kp_s_Could_not_resolve_the_input_layo, __pyx_kp_s_Please_specify_if_input_is_in_c); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
/* … */
        PyErr_SetObject(PyExc_AssertionError, __pyx_tuple__16);
        __PYX_ERR(0, 265, __pyx_L1_error)
      }
    }
    #endif
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_tuple__15); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
 0267:            " Please specify if input is in '(cc,n)' or '(n,cc)' format!")
+0268:         poly = np.array(Poly).T if layout_in.lower()=='(n,cc)' \
    __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_layout_in); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_kp_s_n_cc, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_4, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_T); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = __pyx_t_7;
      __pyx_t_7 = 0;
    } else {
+0269:            else np.array(Poly)
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_7 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = __pyx_t_7;
      __pyx_t_7 = 0;
    }
    __pyx_v_poly = __pyx_t_3;
    __pyx_t_3 = 0;
 0270:     else:
+0271:         poly = np.array(Poly).T if min(np.shape(Poly))==Poly.shape[1]\
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_7 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_Poly));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_Poly->dimensions[1])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_1) {
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_7, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = __pyx_t_2;
      __pyx_t_2 = 0;
    } else {
+0272:            else np.array(Poly)
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_7, function);
        }
      }
      __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_4, ((PyObject *)__pyx_v_Poly)) : __Pyx_PyObject_CallOneArg(__pyx_t_7, ((PyObject *)__pyx_v_Poly));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_3 = __pyx_t_2;
      __pyx_t_2 = 0;
    }
    __pyx_v_poly = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L14:;
+0273:     if not np.allclose(poly[:,0],poly[:,-1], atol=_VSMALL):
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_allclose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_poly, __pyx_tuple__17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
/* … */
  __pyx_tuple__17 = PyTuple_Pack(2, __pyx_slice__8, __pyx_int_0); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
  __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_poly, __pyx_tuple__18); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
  __pyx_t_3 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_atol, __pyx_t_3) < 0) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = ((!__pyx_t_1) != 0);
  if (__pyx_t_5) {
  __pyx_tuple__18 = PyTuple_Pack(2, __pyx_slice__8, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
/* … */
  }
+0274:         poly = np.concatenate((poly,poly[:,0:1]),axis=1)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_slice__19 = PySlice_New(__pyx_int_0, __pyx_int_1, Py_None); if (unlikely(!__pyx_slice__19)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__19);
  __Pyx_GIVEREF(__pyx_slice__19);
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_poly, __pyx_tuple__20); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_poly);
    __Pyx_GIVEREF(__pyx_v_poly);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_poly);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 274, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_poly, __pyx_t_2);
    __pyx_t_2 = 0;
  __pyx_tuple__20 = PyTuple_Pack(2, __pyx_slice__8, __pyx_slice__19); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
+0275:     if poly.shape[0]==2 and not Clock is None:
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_poly, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 275, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {
  } else {
    __pyx_t_5 = __pyx_t_1;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_1 = (__pyx_v_Clock != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L17_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+0276:         if not Clock==Poly_isClockwise(poly):
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Poly_isClockwise); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_v_poly) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_poly);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_Clock, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = ((!__pyx_t_5) != 0);
    if (__pyx_t_6) {
/* … */
    }
+0277:             poly = poly[:,::-1]
  __pyx_slice__21 = PySlice_New(Py_None, Py_None, __pyx_int_neg_1); if (unlikely(!__pyx_slice__21)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__21);
  __Pyx_GIVEREF(__pyx_slice__21);
/* … */
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_poly, __pyx_tuple__22); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_poly, __pyx_t_4);
      __pyx_t_4 = 0;
  __pyx_tuple__22 = PyTuple_Pack(2, __pyx_slice__8, __pyx_slice__21); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 277, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
+0278:     if not close:
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_close); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 278, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_6) != 0);
  if (__pyx_t_5) {
/* … */
  }
+0279:         poly = poly[:,:-1]
  __pyx_slice__23 = PySlice_New(Py_None, __pyx_int_neg_1, Py_None); if (unlikely(!__pyx_slice__23)) __PYX_ERR(0, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__23);
  __Pyx_GIVEREF(__pyx_slice__23);
/* … */
    __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_poly, __pyx_tuple__24); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_poly, __pyx_t_4);
    __pyx_t_4 = 0;
  __pyx_tuple__24 = PyTuple_Pack(2, __pyx_slice__8, __pyx_slice__23); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
+0280:     if layout.lower()=='(n,cc)':
  __pyx_t_4 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_layout); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_kp_s_n_cc, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 280, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_5) {
/* … */
  }
+0281:         poly = poly.T
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_poly, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_poly, __pyx_t_4);
    __pyx_t_4 = 0;
 0282:         # TODO : @LM @DV > seems strange to me that we order all polys
 0283:         # in order "(cc,n)" and just last minute we look at what's actually
 0284:         # asked
 0285:         # >> ok
+0286:     poly = np.ascontiguousarray(poly) if order.lower()=='c' \
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_order); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_5) {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_3, __pyx_v_poly) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_poly);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
+0287:            else np.asfortranarray(poly)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_asfortranarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_v_poly) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_poly);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __Pyx_DECREF_SET(__pyx_v_poly, __pyx_t_4);
  __pyx_t_4 = 0;
+0288:     return poly
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_poly);
  __pyx_r = __pyx_v_poly;
  goto __pyx_L0;
 0289: 
 0290: 
+0291: def Poly_VolAngTor(np.ndarray[double,ndim=2,mode='c'] Poly):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_7Poly_VolAngTor(PyObject *__pyx_self, PyObject *__pyx_v_Poly); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_7Poly_VolAngTor = {"Poly_VolAngTor", (PyCFunction)__pyx_pw_4tofu_4geom_5_GG03_7Poly_VolAngTor, METH_O, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_7Poly_VolAngTor(PyObject *__pyx_self, PyObject *__pyx_v_Poly) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_VolAngTor (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Poly), __pyx_ptype_5numpy_ndarray, 1, "Poly", 0))) __PYX_ERR(0, 291, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_6Poly_VolAngTor(__pyx_self, ((PyArrayObject *)__pyx_v_Poly));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_6Poly_VolAngTor(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_Poly) {
  PyArrayObject *__pyx_v_Ri0 = 0;
  PyArrayObject *__pyx_v_Ri1 = 0;
  PyArrayObject *__pyx_v_Zi0 = 0;
  PyArrayObject *__pyx_v_Zi1 = 0;
  double __pyx_v_V;
  double __pyx_v_BV0;
  double __pyx_v_BV1;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Poly;
  __Pyx_Buffer __pyx_pybuffer_Poly;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Ri0;
  __Pyx_Buffer __pyx_pybuffer_Ri0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Ri1;
  __Pyx_Buffer __pyx_pybuffer_Ri1;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Zi0;
  __Pyx_Buffer __pyx_pybuffer_Zi0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Zi1;
  __Pyx_Buffer __pyx_pybuffer_Zi1;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Poly_VolAngTor", 0);
  __pyx_pybuffer_Ri0.pybuffer.buf = NULL;
  __pyx_pybuffer_Ri0.refcount = 0;
  __pyx_pybuffernd_Ri0.data = NULL;
  __pyx_pybuffernd_Ri0.rcbuffer = &__pyx_pybuffer_Ri0;
  __pyx_pybuffer_Ri1.pybuffer.buf = NULL;
  __pyx_pybuffer_Ri1.refcount = 0;
  __pyx_pybuffernd_Ri1.data = NULL;
  __pyx_pybuffernd_Ri1.rcbuffer = &__pyx_pybuffer_Ri1;
  __pyx_pybuffer_Zi0.pybuffer.buf = NULL;
  __pyx_pybuffer_Zi0.refcount = 0;
  __pyx_pybuffernd_Zi0.data = NULL;
  __pyx_pybuffernd_Zi0.rcbuffer = &__pyx_pybuffer_Zi0;
  __pyx_pybuffer_Zi1.pybuffer.buf = NULL;
  __pyx_pybuffer_Zi1.refcount = 0;
  __pyx_pybuffernd_Zi1.data = NULL;
  __pyx_pybuffernd_Zi1.rcbuffer = &__pyx_pybuffer_Zi1;
  __pyx_pybuffer_Poly.pybuffer.buf = NULL;
  __pyx_pybuffer_Poly.refcount = 0;
  __pyx_pybuffernd_Poly.data = NULL;
  __pyx_pybuffernd_Poly.rcbuffer = &__pyx_pybuffer_Poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_Poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 291, __pyx_L1_error)
  }
  __pyx_pybuffernd_Poly.diminfo[0].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Poly.diminfo[0].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Poly.diminfo[1].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Poly.diminfo[1].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ri0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ri1.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Zi0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Zi1.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Poly_VolAngTor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ri0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ri1.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Zi0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Zi1.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_Ri0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Ri1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Zi0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Zi1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__164 = PyTuple_Pack(8, __pyx_n_s_Poly, __pyx_n_s_Ri0, __pyx_n_s_Ri1, __pyx_n_s_Zi0, __pyx_n_s_Zi1, __pyx_n_s_V, __pyx_n_s_BV0, __pyx_n_s_BV1); if (unlikely(!__pyx_tuple__164)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__164);
  __Pyx_GIVEREF(__pyx_tuple__164);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_7Poly_VolAngTor, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Poly_VolAngTor, __pyx_t_1) < 0) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__165 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__164, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Poly_VolAngTor, 291, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__165)) __PYX_ERR(0, 291, __pyx_L1_error)
 0292:     # TODO : @LM > to check the formulas can they be optimized ?
+0293:     cdef np.ndarray[double,ndim=1] Ri0 = Poly[0,:-1], Ri1 = Poly[0,1:]
  __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Poly), __pyx_tuple__25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 293, __pyx_L1_error)
  __pyx_t_2 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Ri0.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_Ri0 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Ri0.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 293, __pyx_L1_error)
    } else {__pyx_pybuffernd_Ri0.diminfo[0].strides = __pyx_pybuffernd_Ri0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Ri0.diminfo[0].shape = __pyx_pybuffernd_Ri0.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_2 = 0;
  __pyx_v_Ri0 = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __pyx_tuple__25 = PyTuple_Pack(2, __pyx_int_0, __pyx_slice__23); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__25);
  __Pyx_GIVEREF(__pyx_tuple__25);
  __pyx_slice__26 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__26)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__26);
  __Pyx_GIVEREF(__pyx_slice__26);
  __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Poly), __pyx_tuple__27); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 293, __pyx_L1_error)
  __pyx_t_2 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Ri1.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_Ri1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Ri1.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 293, __pyx_L1_error)
    } else {__pyx_pybuffernd_Ri1.diminfo[0].strides = __pyx_pybuffernd_Ri1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Ri1.diminfo[0].shape = __pyx_pybuffernd_Ri1.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_2 = 0;
  __pyx_v_Ri1 = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_int_0, __pyx_slice__26); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__27);
  __Pyx_GIVEREF(__pyx_tuple__27);
+0294:     cdef np.ndarray[double,ndim=1] Zi0 = Poly[1,:-1], Zi1 = Poly[1,1:]
  /* "tofu/geom/_GG03.pyx":294
 *     # TODO : @LM > to check the formulas can they be optimized ?
 *     cdef np.ndarray[double,ndim=1] Ri0 = Poly[0,:-1], Ri1 = Poly[0,1:]
 *     cdef np.ndarray[double,ndim=1] Zi0 = Poly[1,:-1], Zi1 = Poly[1,1:]             # <<<<<<<<<<<<<<
 *     cdef double V   =  np.sum((Ri0*Zi1 - Zi0*Ri1) * (Ri0+Ri1)) / 6.
 *     cdef double BV0 =  np.sum(0.5 * (Ri0*Zi1 - Zi0*Ri1) *
 */
  __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Poly), __pyx_tuple__28); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 294, __pyx_L1_error)
  __pyx_t_3 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Zi0.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_Zi0 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Zi0.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 294, __pyx_L1_error)
    } else {__pyx_pybuffernd_Zi0.diminfo[0].strides = __pyx_pybuffernd_Zi0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Zi0.diminfo[0].shape = __pyx_pybuffernd_Zi0.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_3 = 0;
  __pyx_v_Zi0 = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "tofu/geom/_GG03.pyx":294
 *     # TODO : @LM > to check the formulas can they be optimized ?
 *     cdef np.ndarray[double,ndim=1] Ri0 = Poly[0,:-1], Ri1 = Poly[0,1:]
 *     cdef np.ndarray[double,ndim=1] Zi0 = Poly[1,:-1], Zi1 = Poly[1,1:]             # <<<<<<<<<<<<<<
 *     cdef double V   =  np.sum((Ri0*Zi1 - Zi0*Ri1) * (Ri0+Ri1)) / 6.
 *     cdef double BV0 =  np.sum(0.5 * (Ri0*Zi1 - Zi0*Ri1) *
 */
  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_int_1, __pyx_slice__23); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__28);
  __Pyx_GIVEREF(__pyx_tuple__28);
  __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Poly), __pyx_tuple__29); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 294, __pyx_L1_error)
  __pyx_t_3 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Zi1.rcbuffer->pybuffer, (PyObject*)__pyx_t_3, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_Zi1 = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Zi1.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 294, __pyx_L1_error)
    } else {__pyx_pybuffernd_Zi1.diminfo[0].strides = __pyx_pybuffernd_Zi1.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Zi1.diminfo[0].shape = __pyx_pybuffernd_Zi1.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_3 = 0;
  __pyx_v_Zi1 = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_int_1, __pyx_slice__26); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__29);
  __Pyx_GIVEREF(__pyx_tuple__29);
+0295:     cdef double V   =  np.sum((Ri0*Zi1 - Zi0*Ri1) * (Ri0+Ri1)) / 6.
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(((PyObject *)__pyx_v_Ri0), ((PyObject *)__pyx_v_Zi1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyNumber_Multiply(((PyObject *)__pyx_v_Zi0), ((PyObject *)__pyx_v_Ri1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Subtract(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Add(((PyObject *)__pyx_v_Ri0), ((PyObject *)__pyx_v_Ri1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyFloat_DivideObjC(__pyx_t_1, __pyx_float_6_, 6., 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_V = __pyx_t_8;
+0296:     cdef double BV0 =  np.sum(0.5 * (Ri0*Zi1 - Zi0*Ri1) *
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(((PyObject *)__pyx_v_Ri0), ((PyObject *)__pyx_v_Zi1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyNumber_Multiply(((PyObject *)__pyx_v_Zi0), ((PyObject *)__pyx_v_Ri1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Subtract(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_float_0_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0297:                               (Ri1**2 + Ri1*Ri0 + Ri0**2)) / (6.*V)
  __pyx_t_7 = PyNumber_Power(((PyObject *)__pyx_v_Ri1), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_1 = PyNumber_Multiply(((PyObject *)__pyx_v_Ri1), ((PyObject *)__pyx_v_Ri0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyNumber_Add(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Power(((PyObject *)__pyx_v_Ri0), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = PyNumber_Add(__pyx_t_9, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_4 = PyFloat_FromDouble((6. * __pyx_v_V)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_BV0 = __pyx_t_8;
+0298:     cdef double BV1 = -np.sum((Ri1**2*Zi0*(2.*Zi1+Zi0) +
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_4 = PyNumber_Power(((PyObject *)__pyx_v_Ri1), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, ((PyObject *)__pyx_v_Zi0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_float_2_, ((PyObject *)__pyx_v_Zi1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyNumber_Add(__pyx_t_4, ((PyObject *)__pyx_v_Zi0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_t_10 = PyNumber_Add(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
  __pyx_t_5 = PyNumber_Negative(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0299:                                2.*Ri0*Ri1*(Zi0**2-Zi1**2) -
  __pyx_t_6 = PyNumber_Multiply(__pyx_float_2_, ((PyObject *)__pyx_v_Ri0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyNumber_Multiply(__pyx_t_6, ((PyObject *)__pyx_v_Ri1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Power(((PyObject *)__pyx_v_Zi0), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_9 = PyNumber_Power(((PyObject *)__pyx_v_Zi1), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = PyNumber_Subtract(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Multiply(__pyx_t_7, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
  __pyx_t_7 = PyNumber_Subtract(__pyx_t_10, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 299, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0300:                                Ri0**2*Zi1*(Zi1+2.*Zi0))/4.) / (6.*V)
  __pyx_t_9 = PyNumber_Power(((PyObject *)__pyx_v_Ri0), __pyx_int_2, Py_None); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_9, ((PyObject *)__pyx_v_Zi1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Multiply(__pyx_float_2_, ((PyObject *)__pyx_v_Zi0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyNumber_Add(((PyObject *)__pyx_v_Zi1), __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Multiply(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
  __pyx_t_9 = __Pyx_PyFloat_DivideObjC(__pyx_t_7, __pyx_float_4_, 4., 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_t_1 = PyFloat_FromDouble((6. * __pyx_v_V)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_BV1 = __pyx_t_8;
+0301:     return V, np.array([BV0,BV1])
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_V); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_BV0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_BV1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_10);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_10);
  __pyx_t_5 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_10, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
  __pyx_t_9 = 0;
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 0302: 
 0303: 
 0304: 
 0305: """
 0306: ###############################################################################
 0307: ###############################################################################
 0308:                     Sinogram specific
 0309: ###############################################################################
 0310: """
 0311: 
+0312: def Sino_ImpactEnv(np.ndarray[double,ndim=1] RZ,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_9Sino_ImpactEnv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_8Sino_ImpactEnv[] = " Computes impact parameters of a Tor enveloppe\n    (a `Tor` is a closed 2D polygon)\n\n    D. VEZINET, Aug. 2014\n    Parameters\n    ----------\n    RZ :    np.ndarray\n        (2,) array indicating the reference impact point\n    Poly :  np.ndarray\n        (2,N) array containing the coordinatesof a closed polygon\n    NP :    int\n        Number of indicating the number of points used for discretising theta between 0 and pi\n\n    Returns\n    -------\n        theta\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_9Sino_ImpactEnv = {"Sino_ImpactEnv", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_9Sino_ImpactEnv, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_8Sino_ImpactEnv};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_9Sino_ImpactEnv(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_RZ = 0;
  PyArrayObject *__pyx_v_Poly = 0;
  int __pyx_v_NP;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sino_ImpactEnv (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_RZ,&__pyx_n_s_Poly,&__pyx_n_s_NP,&__pyx_n_s_Test,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_8Sino_ImpactEnv(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_RZ, PyArrayObject *__pyx_v_Poly, int __pyx_v_NP, PyObject *__pyx_v_Test) {
  CYTHON_UNUSED int __pyx_v_NPoly;
  PyObject *__pyx_v_theta = NULL;
  PyObject *__pyx_v_vect = NULL;
  PyObject *__pyx_v_sca = NULL;
  PyObject *__pyx_v_scamin = NULL;
  PyObject *__pyx_v_scamax = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Poly;
  __Pyx_Buffer __pyx_pybuffer_Poly;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_RZ;
  __Pyx_Buffer __pyx_pybuffer_RZ;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Sino_ImpactEnv", 0);
  __pyx_pybuffer_RZ.pybuffer.buf = NULL;
  __pyx_pybuffer_RZ.refcount = 0;
  __pyx_pybuffernd_RZ.data = NULL;
  __pyx_pybuffernd_RZ.rcbuffer = &__pyx_pybuffer_RZ;
  __pyx_pybuffer_Poly.pybuffer.buf = NULL;
  __pyx_pybuffer_Poly.refcount = 0;
  __pyx_pybuffernd_Poly.data = NULL;
  __pyx_pybuffernd_Poly.rcbuffer = &__pyx_pybuffer_Poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_RZ.rcbuffer->pybuffer, (PyObject*)__pyx_v_RZ, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 312, __pyx_L1_error)
  }
  __pyx_pybuffernd_RZ.diminfo[0].strides = __pyx_pybuffernd_RZ.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_RZ.diminfo[0].shape = __pyx_pybuffernd_RZ.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_Poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 312, __pyx_L1_error)
  }
  __pyx_pybuffernd_Poly.diminfo[0].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Poly.diminfo[0].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Poly.diminfo[1].strides = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Poly.diminfo[1].shape = __pyx_pybuffernd_Poly.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_RZ.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Sino_ImpactEnv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Poly.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_RZ.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_theta);
  __Pyx_XDECREF(__pyx_v_vect);
  __Pyx_XDECREF(__pyx_v_sca);
  __Pyx_XDECREF(__pyx_v_scamin);
  __Pyx_XDECREF(__pyx_v_scamax);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__166 = PyTuple_Pack(10, __pyx_n_s_RZ, __pyx_n_s_Poly, __pyx_n_s_NP, __pyx_n_s_Test, __pyx_n_s_NPoly, __pyx_n_s_theta, __pyx_n_s_vect, __pyx_n_s_sca, __pyx_n_s_scamin, __pyx_n_s_scamax); if (unlikely(!__pyx_tuple__166)) __PYX_ERR(0, 312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__166);
  __Pyx_GIVEREF(__pyx_tuple__166);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_9Sino_ImpactEnv, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sino_ImpactEnv, __pyx_t_1) < 0) __PYX_ERR(0, 312, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__167 = (PyObject*)__Pyx_PyCode_New(4, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Sino_ImpactEnv, 312, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__167)) __PYX_ERR(0, 312, __pyx_L1_error)
+0313:                    np.ndarray[double,ndim=2] Poly, int NP=50, Test=True):
    values[3] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RZ)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Sino_ImpactEnv", 0, 2, 4, 1); __PYX_ERR(0, 312, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_NP);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Sino_ImpactEnv") < 0)) __PYX_ERR(0, 312, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_RZ = ((PyArrayObject *)values[0]);
    __pyx_v_Poly = ((PyArrayObject *)values[1]);
    if (values[2]) {
      __pyx_v_NP = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_NP == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 313, __pyx_L3_error)
    } else {
      __pyx_v_NP = ((int)50);
    }
    __pyx_v_Test = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Sino_ImpactEnv", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 312, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.Sino_ImpactEnv", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_RZ), __pyx_ptype_5numpy_ndarray, 1, "RZ", 0))) __PYX_ERR(0, 312, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Poly), __pyx_ptype_5numpy_ndarray, 1, "Poly", 0))) __PYX_ERR(0, 313, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_8Sino_ImpactEnv(__pyx_self, __pyx_v_RZ, __pyx_v_Poly, __pyx_v_NP, __pyx_v_Test);
 0314:     """ Computes impact parameters of a Tor enveloppe
 0315:     (a `Tor` is a closed 2D polygon)
 0316: 
 0317:     D. VEZINET, Aug. 2014
 0318:     Parameters
 0319:     ----------
 0320:     RZ :    np.ndarray
 0321:         (2,) array indicating the reference impact point
 0322:     Poly :  np.ndarray
 0323:         (2,N) array containing the coordinatesof a closed polygon
 0324:     NP :    int
 0325:         Number of indicating the number of points used for discretising theta between 0 and pi
 0326: 
 0327:     Returns
 0328:     -------
 0329:         theta
 0330:     """
+0331:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 331, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0332:         assert RZ.size==2, 'Arg RZ should be a (2,) np.ndarray!'
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_RZ), __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 332, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 332, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_RZ_should_be_a_2_np_ndarray);
        __PYX_ERR(0, 332, __pyx_L1_error)
      }
    }
    #endif
+0333:         assert Poly.shape[0]==2, 'Arg Poly should be a (2,N) np.ndarray!'
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!(((__pyx_v_Poly->dimensions[0]) == 2) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Poly_should_be_a_2_N_np_ndar);
        __PYX_ERR(0, 333, __pyx_L1_error)
      }
    }
    #endif
+0334:     cdef int NPoly = Poly.shape[1]
  __pyx_v_NPoly = (__pyx_v_Poly->dimensions[1]);
 0335:     # Theta sampling and unit vector
+0336:     theta = np.linspace(0.,np.pi,NP,endpoint=True)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_linspace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_float_0_);
  __Pyx_GIVEREF(__pyx_float_0_);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_float_0_);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_endpoint, Py_True) < 0) __PYX_ERR(0, 336, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_theta = __pyx_t_4;
  __pyx_t_4 = 0;
+0337:     vect = np.array([np.cos(theta), np.sin(theta)])
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_cos); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_v_theta) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_theta);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sin); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_2, __pyx_v_theta) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_theta);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 337, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_vect = __pyx_t_4;
  __pyx_t_4 = 0;
 0338: 
 0339:     # Scalar product
+0340:     sca = np.sum(vect[:,:,np.newaxis]*(Poly-RZ[:,np.newaxis])[:,np.newaxis,:],axis=0)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_newaxis); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice__8);
  __Pyx_INCREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_slice__8);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_vect, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_newaxis); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice__8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_RZ), __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Subtract(((PyObject *)__pyx_v_Poly), __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_newaxis); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_slice__8);
  __Pyx_GIVEREF(__pyx_slice__8);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_slice__8);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 340, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_sca = __pyx_t_7;
  __pyx_t_7 = 0;
+0341:     scamin = np.min(sca,axis=1)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_min); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_sca);
  __Pyx_GIVEREF(__pyx_v_sca);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_sca);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_scamin = __pyx_t_5;
  __pyx_t_5 = 0;
+0342:     scamax = np.max(sca,axis=1)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_sca);
  __Pyx_GIVEREF(__pyx_v_sca);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_sca);
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 342, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_scamax = __pyx_t_6;
  __pyx_t_6 = 0;
+0343:     return theta, np.array([scamax, scamin])
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = PyList_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_INCREF(__pyx_v_scamax);
  __Pyx_GIVEREF(__pyx_v_scamax);
  PyList_SET_ITEM(__pyx_t_7, 0, __pyx_v_scamax);
  __Pyx_INCREF(__pyx_v_scamin);
  __Pyx_GIVEREF(__pyx_v_scamin);
  PyList_SET_ITEM(__pyx_t_7, 1, __pyx_v_scamin);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_theta);
  __Pyx_GIVEREF(__pyx_v_theta);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_theta);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 0344: 
 0345: 
 0346: # For sinograms
+0347: def ConvertImpact_Theta2Xi(theta, pP, pN, sort=True):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_11ConvertImpact_Theta2Xi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_11ConvertImpact_Theta2Xi = {"ConvertImpact_Theta2Xi", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_11ConvertImpact_Theta2Xi, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_11ConvertImpact_Theta2Xi(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_theta = 0;
  PyObject *__pyx_v_pP = 0;
  PyObject *__pyx_v_pN = 0;
  PyObject *__pyx_v_sort = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ConvertImpact_Theta2Xi (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_theta,&__pyx_n_s_pP,&__pyx_n_s_pN,&__pyx_n_s_sort,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_theta)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pP)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ConvertImpact_Theta2Xi", 0, 3, 4, 1); __PYX_ERR(0, 347, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pN)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("ConvertImpact_Theta2Xi", 0, 3, 4, 2); __PYX_ERR(0, 347, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_sort);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ConvertImpact_Theta2Xi") < 0)) __PYX_ERR(0, 347, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_theta = values[0];
    __pyx_v_pP = values[1];
    __pyx_v_pN = values[2];
    __pyx_v_sort = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ConvertImpact_Theta2Xi", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 347, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.ConvertImpact_Theta2Xi", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_10ConvertImpact_Theta2Xi(__pyx_self, __pyx_v_theta, __pyx_v_pP, __pyx_v_pN, __pyx_v_sort);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_10ConvertImpact_Theta2Xi(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_theta, PyObject *__pyx_v_pP, PyObject *__pyx_v_pN, PyObject *__pyx_v_sort) {
  PyObject *__pyx_v_pPbis = NULL;
  PyObject *__pyx_v_pNbis = NULL;
  PyObject *__pyx_v_xi = NULL;
  PyObject *__pyx_v_ind = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ConvertImpact_Theta2Xi", 0);
  __Pyx_INCREF(__pyx_v_theta);
  __Pyx_INCREF(__pyx_v_pP);
  __Pyx_INCREF(__pyx_v_pN);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("tofu.geom._GG03.ConvertImpact_Theta2Xi", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pPbis);
  __Pyx_XDECREF(__pyx_v_pNbis);
  __Pyx_XDECREF(__pyx_v_xi);
  __Pyx_XDECREF(__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_theta);
  __Pyx_XDECREF(__pyx_v_pP);
  __Pyx_XDECREF(__pyx_v_pN);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__168 = PyTuple_Pack(8, __pyx_n_s_theta, __pyx_n_s_pP, __pyx_n_s_pN, __pyx_n_s_sort, __pyx_n_s_pPbis, __pyx_n_s_pNbis, __pyx_n_s_xi, __pyx_n_s_ind); if (unlikely(!__pyx_tuple__168)) __PYX_ERR(0, 347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__168);
  __Pyx_GIVEREF(__pyx_tuple__168);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_11ConvertImpact_Theta2Xi, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ConvertImpact_Theta2Xi, __pyx_t_1) < 0) __PYX_ERR(0, 347, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__169 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_ConvertImpact_Theta2Xi, 347, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__169)) __PYX_ERR(0, 347, __pyx_L1_error)
+0348:     if hasattr(theta,'__getitem__'):
  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_theta, __pyx_n_s_getitem); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 348, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0349:         pP, pN, theta = np.asarray(pP), np.asarray(pN), np.asarray(theta)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_v_pP) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_pP);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_v_pN) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_pN);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_4, __pyx_v_theta) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_theta);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF_SET(__pyx_v_pP, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_pN, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_theta, __pyx_t_6);
    __pyx_t_6 = 0;
+0350:         assert pP.shape==pN.shape==theta.shape, (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_pP, __pyx_n_s_shape); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pN, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 350, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 350, __pyx_L1_error)
      if (__Pyx_PyObject_IsTrue(__pyx_t_3)) {
        __Pyx_DECREF(__pyx_t_3);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_theta, __pyx_n_s_shape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyObject_RichCompare(__pyx_t_5, __pyx_t_7, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 350, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 350, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_pP_pN_and_theta_must_have_s);
        __PYX_ERR(0, 350, __pyx_L1_error)
      }
    }
    #endif
 0351:             "Args pP, pN and theta must have same shape!")
+0352:         pPbis, pNbis = np.copy(pP), np.copy(pN)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_5, __pyx_v_pP) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_pP);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_copy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_5, __pyx_v_pN) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_pN);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 352, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_pPbis = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_v_pNbis = __pyx_t_6;
    __pyx_t_6 = 0;
+0353:         xi = theta - np.pi/2.
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_pi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyFloat_DivideObjC(__pyx_t_3, __pyx_float_2_, 2., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Subtract(__pyx_v_theta, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_xi = __pyx_t_3;
    __pyx_t_3 = 0;
+0354:         ind = xi < 0
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_xi, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 354, __pyx_L1_error)
    __pyx_v_ind = __pyx_t_3;
    __pyx_t_3 = 0;
+0355:         pPbis[ind], pNbis[ind], xi[ind] = -pN[ind], -pP[ind], xi[ind]+np.pi
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pN, __pyx_v_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pP, __pyx_v_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = PyNumber_Negative(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_xi, __pyx_v_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pi); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_pPbis, __pyx_v_ind, __pyx_t_6) < 0)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_pNbis, __pyx_v_ind, __pyx_t_7) < 0)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(PyObject_SetItem(__pyx_v_xi, __pyx_v_ind, __pyx_t_5) < 0)) __PYX_ERR(0, 355, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0356:         if sort:
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_sort); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 356, __pyx_L1_error)
    if (__pyx_t_2) {
/* … */
    }
+0357:             ind = np.argsort(xi)
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_argsort); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_xi) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_xi);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_ind, __pyx_t_5);
      __pyx_t_5 = 0;
+0358:             xi, pP, pN = xi[ind], pPbis[ind], pNbis[ind]
      __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_xi, __pyx_v_ind); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_pPbis, __pyx_v_ind); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pNbis, __pyx_v_ind); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 358, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF_SET(__pyx_v_xi, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_pP, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_DECREF_SET(__pyx_v_pN, __pyx_t_7);
      __pyx_t_7 = 0;
+0359:         return xi, pP, pN
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_xi);
    __Pyx_GIVEREF(__pyx_v_xi);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_xi);
    __Pyx_INCREF(__pyx_v_pP);
    __Pyx_GIVEREF(__pyx_v_pP);
    PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_pP);
    __Pyx_INCREF(__pyx_v_pN);
    __Pyx_GIVEREF(__pyx_v_pN);
    PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_pN);
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
 0360:     else:
+0361:         assert not (hasattr(pP,'__getitem__') or hasattr(pN,'__getitem__')), (
  /*else*/ {
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_HasAttr(__pyx_v_pP, __pyx_n_s_getitem); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 361, __pyx_L1_error)
      __pyx_t_8 = (__pyx_t_1 != 0);
      if (!__pyx_t_8) {
      } else {
        __pyx_t_2 = __pyx_t_8;
        goto __pyx_L5_bool_binop_done;
      }
      __pyx_t_8 = __Pyx_HasAttr(__pyx_v_pN, __pyx_n_s_getitem); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 361, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_8 != 0);
      __pyx_t_2 = __pyx_t_1;
      __pyx_L5_bool_binop_done:;
      if (unlikely(!((!__pyx_t_2) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_pP_pN_and_theta_must_have_s);
        __PYX_ERR(0, 361, __pyx_L1_error)
      }
    }
    #endif
 0362:             "Args pP, pN and theta must have same shape!")
+0363:         xi = theta - np.pi/2.
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_pi); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyFloat_DivideObjC(__pyx_t_6, __pyx_float_2_, 2., 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Subtract(__pyx_v_theta, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_v_xi = __pyx_t_6;
    __pyx_t_6 = 0;
+0364:         if xi < 0.:
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_xi, __pyx_float_0_, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 364, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 364, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_2) {
/* … */
    }
+0365:             return xi+np.pi, -pN, -pP
      __Pyx_XDECREF(__pyx_r);
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_pi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Add(__pyx_v_xi, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = PyNumber_Negative(__pyx_v_pN); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = PyNumber_Negative(__pyx_v_pP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_5);
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;
      __pyx_t_5 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
 0366:         else:
+0367:             return xi, pP, pN
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 367, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_v_xi);
      __Pyx_GIVEREF(__pyx_v_xi);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_xi);
      __Pyx_INCREF(__pyx_v_pP);
      __Pyx_GIVEREF(__pyx_v_pP);
      PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_pP);
      __Pyx_INCREF(__pyx_v_pN);
      __Pyx_GIVEREF(__pyx_v_pN);
      PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_pN);
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
    }
  }
 0368: 
 0369: 
 0370: """
 0371: ########################################################
 0372: ########################################################
 0373: ########################################################
 0374: #                       Ves-specific
 0375: ########################################################
 0376: ########################################################
 0377: ########################################################
 0378: """
 0379: 
 0380: 
 0381: ########################################################
 0382: ########################################################
 0383: #       isInside
 0384: ########################################################
 0385: 
+0386: def _Ves_isInside(Pts, VPoly, Lim=None, nLim=None,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_13_Ves_isInside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_13_Ves_isInside = {"_Ves_isInside", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_13_Ves_isInside, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_13_Ves_isInside(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_Pts = 0;
  PyObject *__pyx_v_VPoly = 0;
  PyObject *__pyx_v_Lim = 0;
  PyObject *__pyx_v_nLim = 0;
  PyObject *__pyx_v_VType = 0;
  PyObject *__pyx_v_In = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_isInside (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Pts,&__pyx_n_s_VPoly,&__pyx_n_s_Lim,&__pyx_n_s_nLim,&__pyx_n_s_VType,&__pyx_n_s_In,&__pyx_n_s_Test,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)__pyx_n_s_Tor);
    values[5] = ((PyObject *)__pyx_kp_s_X_Y_Z);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_12_Ves_isInside(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_Pts, PyObject *__pyx_v_VPoly, PyObject *__pyx_v_Lim, PyObject *__pyx_v_nLim, PyObject *__pyx_v_VType, PyObject *__pyx_v_In, PyObject *__pyx_v_Test) {
  CYTHON_UNUSED PyObject *__pyx_v_path = NULL;
  PyObject *__pyx_v_pts = NULL;
  PyObject *__pyx_v_ind = NULL;
  PyObject *__pyx_v_err = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_ind0 = NULL;
  PyObject *__pyx_v_ii = NULL;
  PyObject *__pyx_v_lim = NULL;
  PyObject *__pyx_v_ll = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_isInside", 0);
  __Pyx_INCREF(__pyx_v_Lim);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_isInside", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_path);
  __Pyx_XDECREF(__pyx_v_pts);
  __Pyx_XDECREF(__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_ind0);
  __Pyx_XDECREF(__pyx_v_ii);
  __Pyx_XDECREF(__pyx_v_lim);
  __Pyx_XDECREF(__pyx_v_ll);
  __Pyx_XDECREF(__pyx_v_Lim);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__170 = PyTuple_Pack(16, __pyx_n_s_Pts, __pyx_n_s_VPoly, __pyx_n_s_Lim, __pyx_n_s_nLim, __pyx_n_s_VType, __pyx_n_s_In, __pyx_n_s_Test, __pyx_n_s_path, __pyx_n_s_pts, __pyx_n_s_ind, __pyx_n_s_err, __pyx_n_s_msg, __pyx_n_s_ind0, __pyx_n_s_ii, __pyx_n_s_lim, __pyx_n_s_ll); if (unlikely(!__pyx_tuple__170)) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__170);
  __Pyx_GIVEREF(__pyx_tuple__170);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_13_Ves_isInside, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_isInside, __pyx_t_1) < 0) __PYX_ERR(0, 386, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__171 = (PyObject*)__Pyx_PyCode_New(7, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_isInside, 386, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__171)) __PYX_ERR(0, 386, __pyx_L1_error)
+0387:                   VType='Tor', In='(X,Y,Z)', Test=True):
    values[6] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Pts)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_isInside", 0, 2, 7, 1); __PYX_ERR(0, 386, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Lim);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nLim);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VType);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_In);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_isInside") < 0)) __PYX_ERR(0, 386, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_Pts = values[0];
    __pyx_v_VPoly = values[1];
    __pyx_v_Lim = values[2];
    __pyx_v_nLim = values[3];
    __pyx_v_VType = values[4];
    __pyx_v_In = values[5];
    __pyx_v_Test = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_isInside", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 386, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_isInside", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_12_Ves_isInside(__pyx_self, __pyx_v_Pts, __pyx_v_VPoly, __pyx_v_Lim, __pyx_v_nLim, __pyx_v_VType, __pyx_v_In, __pyx_v_Test);
+0388:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 388, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+0389:         assert type(Pts) is np.ndarray and Pts.ndim in [1,2], "Arg Pts must be a 1D or 2D np.ndarray !"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_Pts)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L4_bool_binop_done;
      }
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!__pyx_t_2) {
      } else {
        __pyx_t_3 = __pyx_t_2;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 389, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_3 = __pyx_t_2;
      __pyx_L6_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = (__pyx_t_3 != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Pts_must_be_a_1D_or_2D_np_nd);
        __PYX_ERR(0, 389, __pyx_L1_error)
      }
    }
    #endif
+0390:         assert type(VPoly) is np.ndarray and VPoly.ndim==2 and VPoly.shape[0]==2, "Arg VPoly must be a (2,N) np.ndarray !"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_VPoly)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_shape); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 390, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __pyx_t_3;
      __pyx_L8_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_VPoly_must_be_a_2_N_np_ndarr);
        __PYX_ERR(0, 390, __pyx_L1_error)
      }
    }
    #endif
+0391:         assert Lim is None or (hasattr(Lim,'__iter__') and len(Lim)==2) or (hasattr(Lim,'__iter__') and all([hasattr(ll,'__iter__') and len(ll)==2 for ll in Lim])), "Arg Lim must be a len()==2 iterable or a list of such !"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_3 = (__pyx_v_Lim == Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (!__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_HasAttr(__pyx_v_Lim, __pyx_n_s_iter); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (!__pyx_t_3) {
        goto __pyx_L13_next_or;
      } else {
      }
      __pyx_t_6 = PyObject_Length(__pyx_v_Lim); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
      __pyx_t_3 = ((__pyx_t_6 == 2) != 0);
      if (!__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_L13_next_or:;
      __pyx_t_3 = __Pyx_HasAttr(__pyx_v_Lim, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 391, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (likely(PyList_CheckExact(__pyx_v_Lim)) || PyTuple_CheckExact(__pyx_v_Lim)) {
        __pyx_t_4 = __pyx_v_Lim; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_Lim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 391, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 391, __pyx_L1_error)
      }
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_4))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 391, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 391, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 391, __pyx_L1_error)
            #else
            __pyx_t_8 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 391, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            #endif
          }
        } else {
          __pyx_t_8 = __pyx_t_7(__pyx_t_4);
          if (unlikely(!__pyx_t_8)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 391, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_8);
        }
        __Pyx_XDECREF_SET(__pyx_v_ll, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_2 = __Pyx_HasAttr(__pyx_v_ll, __pyx_n_s_iter); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
        if (__pyx_t_2) {
        } else {
          __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 391, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_8 = __pyx_t_9;
          __pyx_t_9 = 0;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_10 = PyObject_Length(__pyx_v_ll); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
        __pyx_t_2 = (__pyx_t_10 == 2);
        __pyx_t_9 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 391, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_8 = __pyx_t_9;
        __pyx_t_9 = 0;
        __pyx_L18_bool_binop_done:;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 391, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 391, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 391, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_1 = __pyx_t_2;
      __pyx_L11_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Lim_must_be_a_len_2_iterable);
        __PYX_ERR(0, 391, __pyx_L1_error)
      }
    }
    #endif
+0392:         assert type(VType) is str and VType.lower() in ['tor','lin'], "Arg VType must be a str in ['Tor','Lin'] !"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = (((PyObject *)Py_TYPE(__pyx_v_VType)) == ((PyObject *)(&PyString_Type)));
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L20_bool_binop_done;
      }
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 392, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 392, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 392, __pyx_L1_error)
      if (!__pyx_t_2) {
      } else {
        __pyx_t_3 = __pyx_t_2;
        goto __pyx_L22_bool_binop_done;
      }
      __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_lin, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 392, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_2;
      __pyx_L22_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_2 = (__pyx_t_3 != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L20_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_VType_must_be_a_str_in_Tor_L);
        __PYX_ERR(0, 392, __pyx_L1_error)
      }
    }
    #endif
+0393:         assert type(nLim) in [int,np.int64] and nLim>=0
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_nLim)));
      __pyx_t_4 = ((PyObject *)Py_TYPE(__pyx_v_nLim));
      __pyx_t_5 = PyObject_RichCompare(((PyObject *)__pyx_t_4), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 393, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (!__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L26_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_int64); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyObject_RichCompare(((PyObject *)__pyx_t_4), __pyx_t_8, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __pyx_t_3;
      __pyx_L26_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L24_bool_binop_done;
      }
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_nLim, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 393, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 393, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_1 = __pyx_t_3;
      __pyx_L24_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 393, __pyx_L1_error)
      }
    }
    #endif
 0394: 
+0395:     path = Path(VPoly.T)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_path = __pyx_t_4;
  __pyx_t_4 = 0;
+0396:     if VType.lower()=='tor':
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 396, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L28;
  }
+0397:         if Lim is None or nLim==0:
    __pyx_t_3 = (__pyx_v_Lim == Py_None);
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L30_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_v_nLim, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 397, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_2;
    __pyx_L30_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L29;
    }
+0398:             pts = CoordShift(Pts, In=In, Out='(R,Z)')
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CoordShift); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_v_Pts);
      __Pyx_GIVEREF(__pyx_v_Pts);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_Pts);
      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_In, __pyx_v_In) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_Out, __pyx_kp_s_R_Z) < 0) __PYX_ERR(0, 398, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_pts = __pyx_t_9;
      __pyx_t_9 = 0;
 0399:             # TODO : @LM > voir avec la fct matplotlib et est-ce que c'est possible de
 0400:             # recoder pour faire plus rapide
+0401:             ind = Path(VPoly.T).contains_points(pts.T, transform=None,
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_9 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pts, __pyx_n_s_T); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 401, __pyx_L1_error)
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_ind = __pyx_t_4;
      __pyx_t_4 = 0;
 0402:                                                 radius=0.0)
 0403:         else:
+0404:             try:
    /*else*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        goto __pyx_L37_try_end;
        __pyx_L32_error:;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        goto __pyx_L1_error;
        __pyx_L37_try_end:;
      }
+0405:                 pts = CoordShift(Pts, In=In, Out='(R,Z,Phi)')
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_CoordShift); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 405, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 405, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_INCREF(__pyx_v_Pts);
          __Pyx_GIVEREF(__pyx_v_Pts);
          PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_Pts);
          __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 405, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_In, __pyx_v_In) < 0) __PYX_ERR(0, 405, __pyx_L32_error)
          if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_Out, __pyx_kp_s_R_Z_Phi) < 0) __PYX_ERR(0, 405, __pyx_L32_error)
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 405, __pyx_L32_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_v_pts = __pyx_t_8;
          __pyx_t_8 = 0;
+0406:             except Exception as err:
        __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
        if (__pyx_t_14) {
          __Pyx_AddTraceback("tofu.geom._GG03._Ves_isInside", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_5, &__pyx_t_9) < 0) __PYX_ERR(0, 406, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_5);
          __pyx_v_err = __pyx_t_5;
+0407:                 msg = str(err)
          __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), __pyx_v_err); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 407, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_v_msg = __pyx_t_4;
          __pyx_t_4 = 0;
+0408:                 msg += "\n    You may have specified points in (R,Z)"
          __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_msg, __pyx_kp_s_You_may_have_specified_points_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 408, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_4);
          __pyx_t_4 = 0;
+0409:                 msg += "\n    But there are toroidally limited elements !"
          __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_msg, __pyx_kp_s_But_there_are_toroidally_limite); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 409, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_4);
          __pyx_t_4 = 0;
+0410:                 msg += "\n      (i.e.: element with self.nLim>0)"
          __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_msg, __pyx_kp_s_i_e_element_with_self_nLim_0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 410, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_4);
          __pyx_t_4 = 0;
+0411:                 msg += "\n    These require to know the phi of points !"
          __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_msg, __pyx_kp_s_These_require_to_know_the_phi_o); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 411, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_4);
          __pyx_t_4 = 0;
+0412:                 raise Exception(msg)
          __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_v_msg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 412, __pyx_L34_except_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_Raise(__pyx_t_4, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __PYX_ERR(0, 412, __pyx_L34_except_error)
        }
        goto __pyx_L34_except_error;
        __pyx_L34_except_error:;
 0413: 
+0414:             ind0 = Path(VPoly.T).contains_points(pts[:2,:].T,
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_9 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
  __pyx_slice__30 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_slice__30)) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice__30);
  __Pyx_GIVEREF(__pyx_slice__30);
      __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__31); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_T); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8);
      __pyx_t_8 = 0;
/* … */
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_v_ind0 = __pyx_t_4;
      __pyx_t_4 = 0;
  __pyx_tuple__31 = PyTuple_Pack(2, __pyx_slice__30, __pyx_slice__8); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__31);
  __Pyx_GIVEREF(__pyx_tuple__31);
+0415:                                                  transform=None, radius=0.0)
      __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 415, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 415, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 415, __pyx_L1_error)
+0416:             if nLim>1:
      __pyx_t_4 = PyObject_RichCompare(__pyx_v_nLim, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 416, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 416, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_1) {
/* … */
        goto __pyx_L40;
      }
+0417:                 ind = np.zeros((nLim,Pts.shape[1]),dtype=bool)
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_v_nLim);
        __Pyx_GIVEREF(__pyx_v_nLim);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_nLim);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
        __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 417, __pyx_L1_error)
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 417, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_v_ind = __pyx_t_5;
        __pyx_t_5 = 0;
+0418:                 for ii in range(0,len(Lim)):
        __pyx_t_6 = PyObject_Length(__pyx_v_Lim); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 418, __pyx_L1_error)
        __pyx_t_5 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
          __pyx_t_4 = __pyx_t_5; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
          __pyx_t_7 = NULL;
        } else {
          __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 418, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 418, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        for (;;) {
          if (likely(!__pyx_t_7)) {
            if (likely(PyList_CheckExact(__pyx_t_4))) {
              if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 418, __pyx_L1_error)
              #else
              __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 418, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              #endif
            } else {
              if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 418, __pyx_L1_error)
              #else
              __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 418, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              #endif
            }
          } else {
            __pyx_t_5 = __pyx_t_7(__pyx_t_4);
            if (unlikely(!__pyx_t_5)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 418, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_5);
          }
          __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_5);
          __pyx_t_5 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+0419:                     lim = [Catan2(Csin(Lim[ii][0]),Ccos(Lim[ii][0])),
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_16 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_16 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyFloat_FromDouble(atan2(sin(__pyx_t_15), cos(__pyx_t_16))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
/* … */
          __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_9);
          PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
          __pyx_t_5 = 0;
          __pyx_t_9 = 0;
          __Pyx_XDECREF_SET(__pyx_v_lim, ((PyObject*)__pyx_t_8));
          __pyx_t_8 = 0;
+0420:                            Catan2(Csin(Lim[ii][1]),Ccos(Lim[ii][1]))]
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_9, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_16 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_16 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_8, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = PyFloat_FromDouble(atan2(sin(__pyx_t_16), cos(__pyx_t_15))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 420, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
+0421:                     if lim[0]<lim[1]:
          __pyx_t_8 = PyObject_RichCompare(PyList_GET_ITEM(__pyx_v_lim, 0), PyList_GET_ITEM(__pyx_v_lim, 1), Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 421, __pyx_L1_error)
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 421, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L43;
          }
+0422:                         ind[ii,:] = (ind0
            __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 422, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_INCREF(__pyx_v_ii);
            __Pyx_GIVEREF(__pyx_v_ii);
            PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ii);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_slice__8);
            if (unlikely(PyObject_SetItem(__pyx_v_ind, __pyx_t_5, __pyx_t_9) < 0)) __PYX_ERR(0, 422, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0423:                                      & (pts[2,:]>=lim[0])
            __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 423, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, PyList_GET_ITEM(__pyx_v_lim, 0), Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 423, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __pyx_t_8 = PyNumber_And(__pyx_v_ind0, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 423, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
  __pyx_tuple__32 = PyTuple_Pack(2, __pyx_int_2, __pyx_slice__8); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
+0424:                                      & (pts[2,:]<=lim[1]))
            __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 424, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, PyList_GET_ITEM(__pyx_v_lim, 1), Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 424, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = PyNumber_And(__pyx_t_8, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 424, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0425:                     else:
+0426:                         ind[ii,:] = (ind0
            __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 426, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_INCREF(__pyx_v_ii);
            __Pyx_GIVEREF(__pyx_v_ii);
            PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_ii);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_slice__8);
            if (unlikely(PyObject_SetItem(__pyx_v_ind, __pyx_t_9, __pyx_t_8) < 0)) __PYX_ERR(0, 426, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          }
          __pyx_L43:;
+0427:                                      & ((pts[2,:]>=lim[0])
          /*else*/ {
/* … */
            __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 427, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
/* … */
            __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, PyList_GET_ITEM(__pyx_v_lim, 0), Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
            __pyx_t_8 = PyNumber_And(__pyx_v_ind0, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 427, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_8);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+0428:                                         | (pts[2,:]<=lim[1])))
            __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 428, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, PyList_GET_ITEM(__pyx_v_lim, 1), Py_LE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 428, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_9 = PyNumber_Or(__pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 428, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 0429:             else:
+0430:                 Lim = [Catan2(Csin(Lim[0,0]),Ccos(Lim[0,0])),
      /*else*/ {
        __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__33); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__33); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_16 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_16 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyFloat_FromDouble(atan2(sin(__pyx_t_15), cos(__pyx_t_16))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
/* … */
  __pyx_tuple__33 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
/* … */
        __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 430, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_4);
        PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_8);
        PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
        __pyx_t_4 = 0;
        __pyx_t_8 = 0;
        __Pyx_DECREF_SET(__pyx_v_Lim, __pyx_t_9);
        __pyx_t_9 = 0;
+0431:                        Catan2(Csin(Lim[0,1]),Ccos(Lim[0,1]))]
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__34); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_16 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_16 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__34); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_8 = PyFloat_FromDouble(atan2(sin(__pyx_t_16), cos(__pyx_t_15))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 431, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
/* … */
  __pyx_tuple__34 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_1); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(0, 431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__34);
  __Pyx_GIVEREF(__pyx_tuple__34);
+0432:                 if Lim[0]<Lim[1]:
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 432, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 432, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_4 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 432, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 432, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_1) {
/* … */
          goto __pyx_L44;
        }
+0433:                     ind = ind0 & (pts[2,:]>=Lim[0]) & (pts[2,:]<=Lim[1])
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_9 = PyObject_RichCompare(__pyx_t_4, __pyx_t_8, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyNumber_And(__pyx_v_ind0, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, __pyx_t_4, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyNumber_And(__pyx_t_8, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_v_ind = __pyx_t_4;
          __pyx_t_4 = 0;
 0434:                 else :
+0435:                     ind = ind0 & ((pts[2,:]>=Lim[0]) | (pts[2,:]<=Lim[1]))
        /*else*/ {
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_8 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__32); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_LE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyNumber_Or(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = PyNumber_And(__pyx_v_ind0, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 435, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_v_ind = __pyx_t_9;
          __pyx_t_9 = 0;
        }
        __pyx_L44:;
      }
      __pyx_L40:;
    }
    __pyx_L29:;
 0436:     else:
+0437:         pts = CoordShift(Pts, In=In, Out='(X,Y,Z)')
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_CoordShift); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_Pts);
    __Pyx_GIVEREF(__pyx_v_Pts);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_Pts);
    __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_In, __pyx_v_In) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_Out, __pyx_kp_s_X_Y_Z) < 0) __PYX_ERR(0, 437, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_pts = __pyx_t_5;
    __pyx_t_5 = 0;
+0438:         ind0 = Path(VPoly.T).contains_points(pts[1:,:].T,
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Path); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__35); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
    __pyx_t_4 = 0;
/* … */
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_ind0 = __pyx_t_9;
    __pyx_t_9 = 0;
/* … */
  __pyx_tuple__35 = PyTuple_Pack(2, __pyx_slice__26, __pyx_slice__8); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__35);
  __Pyx_GIVEREF(__pyx_tuple__35);
+0439:                                              transform=None, radius=0.0)
    __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 439, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 439, __pyx_L1_error)
+0440:         if nLim>1:
    __pyx_t_9 = PyObject_RichCompare(__pyx_v_nLim, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 440, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 440, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L45;
    }
+0441:             ind = np.zeros((nLim,Pts.shape[1]),dtype=bool)
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_9, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_v_nLim);
      __Pyx_GIVEREF(__pyx_v_nLim);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_nLim);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 441, __pyx_L1_error)
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_ind = __pyx_t_8;
      __pyx_t_8 = 0;
+0442:             for ii in range(0,nLim):
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_int_0);
      __Pyx_INCREF(__pyx_v_nLim);
      __Pyx_GIVEREF(__pyx_v_nLim);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_nLim);
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (likely(PyList_CheckExact(__pyx_t_9)) || PyTuple_CheckExact(__pyx_t_9)) {
        __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
      } else {
        __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 442, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 442, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      for (;;) {
        if (likely(!__pyx_t_7)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 442, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          } else {
            if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_9); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 442, __pyx_L1_error)
            #else
            __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 442, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            #endif
          }
        } else {
          __pyx_t_9 = __pyx_t_7(__pyx_t_8);
          if (unlikely(!__pyx_t_9)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 442, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_9);
        }
        __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_9);
        __pyx_t_9 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0443:                 ind[ii,:] = (ind0
        __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 443, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_v_ii);
        __Pyx_GIVEREF(__pyx_v_ii);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_ii);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_slice__8);
        if (unlikely(PyObject_SetItem(__pyx_v_ind, __pyx_t_9, __pyx_t_17) < 0)) __PYX_ERR(0, 443, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+0444:                              & (pts[0,:]>=Lim[ii][0])
        __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__36); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyObject_RichCompare(__pyx_t_9, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyNumber_And(__pyx_v_ind0, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 444, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__36 = PyTuple_Pack(2, __pyx_int_0, __pyx_slice__8); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(0, 444, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__36);
  __Pyx_GIVEREF(__pyx_tuple__36);
+0445:                              & (pts[0,:]<=Lim[ii][1]))
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__36); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_v_ii); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_17 = __Pyx_GetItemInt(__pyx_t_9, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyObject_RichCompare(__pyx_t_5, __pyx_t_17, Py_LE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_t_17 = PyNumber_And(__pyx_t_4, __pyx_t_9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 445, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 0446:         else:
+0447:             ind = ind0 & (pts[0,:]>=Lim[0,0]) & (pts[0,:]<=Lim[0,1])
    /*else*/ {
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__36); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_17 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__33); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_17, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __pyx_t_17 = PyNumber_And(__pyx_v_ind0, __pyx_t_9); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__36); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__34); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_And(__pyx_t_17, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_v_ind = __pyx_t_8;
      __pyx_t_8 = 0;
    }
    __pyx_L45:;
  }
  __pyx_L28:;
+0448:     return ind
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ind);
  __pyx_r = __pyx_v_ind;
  goto __pyx_L0;
 0449: 
 0450: 
 0451: ########################################################
 0452: ########################################################
 0453: #       Meshing - Common - Linear
 0454: ########################################################
 0455: 
 0456: 
 0457: # Preliminary function to get optimal resolution from input resolution
 0458: @cython.cdivision(True)
 0459: @cython.wraparound(False)
 0460: @cython.boundscheck(False)
+0461: def _Ves_mesh_dlfromL_cython(double[::1] LMinMax, double dL, DL=None, Lim=True,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_15_Ves_mesh_dlfromL_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_14_Ves_mesh_dlfromL_cython[] = " Get the actual reolution from the desired resolution and MinMax\n    and limits\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_15_Ves_mesh_dlfromL_cython = {"_Ves_mesh_dlfromL_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_15_Ves_mesh_dlfromL_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_14_Ves_mesh_dlfromL_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_15_Ves_mesh_dlfromL_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_LMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  PyObject *__pyx_v_DL = 0;
  PyObject *__pyx_v_Lim = 0;
  PyObject *__pyx_v_dLMode = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_mesh_dlfromL_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_LMinMax,&__pyx_n_s_dL,&__pyx_n_s_DL,&__pyx_n_s_Lim,&__pyx_n_s_dLMode,&__pyx_n_s_margin,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)__pyx_n_s_abs);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LMinMax)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_mesh_dlfromL_cython", 0, 2, 6, 1); __PYX_ERR(0, 461, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DL);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Lim);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dLMode);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_mesh_dlfromL_cython") < 0)) __PYX_ERR(0, 461, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_LMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_LMinMax.memview)) __PYX_ERR(0, 461, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 461, __pyx_L3_error)
    __pyx_v_DL = values[2];
    __pyx_v_Lim = values[3];
    __pyx_v_dLMode = values[4];
    if (values[5]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 462, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__37;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_mesh_dlfromL_cython", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 461, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_mesh_dlfromL_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_14_Ves_mesh_dlfromL_cython(__pyx_self, __pyx_v_LMinMax, __pyx_v_dL, __pyx_v_DL, __pyx_v_Lim, __pyx_v_dLMode, __pyx_v_margin);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_14_Ves_mesh_dlfromL_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_LMinMax, double __pyx_v_dL, PyObject *__pyx_v_DL, PyObject *__pyx_v_Lim, PyObject *__pyx_v_dLMode, double __pyx_v_margin) {
  double __pyx_v_N;
  double __pyx_v_dLr;
  __Pyx_memviewslice __pyx_v_DLc = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_L = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indL = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_abs0;
  double __pyx_v_abs1;
  int __pyx_v_nL0;
  int __pyx_v_nL1;
  int __pyx_v_Nind;
  int __pyx_v_ii;
  int __pyx_v_jj;
  PyObject *__pyx_v_dl = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_mesh_dlfromL_cython", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_XDECREF(__pyx_t_29);
  __PYX_XDEC_MEMVIEW(&__pyx_t_30, 1);
  __Pyx_XDECREF(__pyx_t_37);
  __Pyx_XDECREF(__pyx_t_38);
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_mesh_dlfromL_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_DLc, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_L, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indL, 1);
  __Pyx_XDECREF(__pyx_v_dl);
  __PYX_XDEC_MEMVIEW(&__pyx_v_LMinMax, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__172 = PyTuple_Pack(20, __pyx_n_s_LMinMax, __pyx_n_s_dL, __pyx_n_s_DL, __pyx_n_s_Lim, __pyx_n_s_dLMode, __pyx_n_s_margin, __pyx_n_s_N, __pyx_n_s_dLr, __pyx_n_s_DLc, __pyx_n_s_L, __pyx_n_s_indL, __pyx_n_s_abs0, __pyx_n_s_abs1, __pyx_n_s_A, __pyx_n_s_nL0, __pyx_n_s_nL1, __pyx_n_s_Nind, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_dl); if (unlikely(!__pyx_tuple__172)) __PYX_ERR(0, 461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__172);
  __Pyx_GIVEREF(__pyx_tuple__172);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_15_Ves_mesh_dlfromL_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_mesh_dlfromL_cython, __pyx_t_1) < 0) __PYX_ERR(0, 461, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__173 = (PyObject*)__Pyx_PyCode_New(6, 0, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__172, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_mesh_dlfromL_cython, 461, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__173)) __PYX_ERR(0, 461, __pyx_L1_error)
+0462:                              dLMode='abs', double margin=_VSMALL):
  __pyx_k__37 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0463:     """ Get the actual reolution from the desired resolution and MinMax
 0464:     and limits
 0465:     """
 0466:     # Get the number of mesh elements in LMinMax
 0467:     cdef double N
+0468:     if dLMode.lower()=='abs':
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dLMode, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_abs, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 468, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+0469:         N = Cceil((LMinMax[1] - LMinMax[0])/dL)
    __pyx_t_5 = 1;
    __pyx_t_6 = 0;
    __pyx_v_N = ceil((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_5)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_6)) )))) / __pyx_v_dL));
 0470:     else:
+0471:         N = Cceil(1./dL)
  /*else*/ {
    __pyx_v_N = ceil((1. / __pyx_v_dL));
  }
  __pyx_L3:;
 0472:     # Derive the real (effective) resolution
+0473:     cdef double dLr = (LMinMax[1] - LMinMax[0])/N
  __pyx_t_7 = 1;
  __pyx_t_8 = 0;
  __pyx_v_dLr = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_7)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_8)) )))) / __pyx_v_N);
 0474:     # Get desired limits if any
 0475:     cdef double[::1] DLc, L
 0476:     cdef long [::1] indL
 0477:     #cdef np.ndarray[double,ndim=1] indL, L
 0478:     cdef double abs0, abs1, A
 0479:     cdef int nL0, nL1, Nind, ii, jj
 0480:     cdef list dl
+0481:     if DL is None:
  __pyx_t_4 = (__pyx_v_DL == Py_None);
  __pyx_t_9 = (__pyx_t_4 != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L4;
  }
+0482:         DLc = LMinMax
    __PYX_INC_MEMVIEW(&__pyx_v_LMinMax, 0);
    __pyx_v_DLc = __pyx_v_LMinMax;
 0483:     else:
+0484:         dl = list(DL)
  /*else*/ {
    __pyx_t_1 = PySequence_List(__pyx_v_DL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_dl = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+0485:         if dl[0] is None:
    __pyx_t_9 = (PyList_GET_ITEM(__pyx_v_dl, 0) == Py_None);
    __pyx_t_4 = (__pyx_t_9 != 0);
    if (__pyx_t_4) {
/* … */
    }
+0486:             dl[0] = LMinMax[0]
      __pyx_t_10 = 0;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_10)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(__Pyx_SetItemInt(__pyx_v_dl, 0, __pyx_t_1, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 486, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0487:         if dl[1] is None:
    __pyx_t_4 = (PyList_GET_ITEM(__pyx_v_dl, 1) == Py_None);
    __pyx_t_9 = (__pyx_t_4 != 0);
    if (__pyx_t_9) {
/* … */
    }
+0488:             dl[1] = LMinMax[1]
      __pyx_t_11 = 1;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_11)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 488, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(__Pyx_SetItemInt(__pyx_v_dl, 1, __pyx_t_1, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 488, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0489:         if Lim and dl[0]<=LMinMax[0]:
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_Lim); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 489, __pyx_L1_error)
    if (__pyx_t_4) {
    } else {
      __pyx_t_9 = __pyx_t_4;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_12 = 0;
    __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_12)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PyObject_RichCompare(PyList_GET_ITEM(__pyx_v_dl, 0), __pyx_t_1, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 489, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_9 = __pyx_t_4;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_9) {
/* … */
    }
+0490:             dl[0] = LMinMax[0]
      __pyx_t_13 = 0;
      __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_13)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__Pyx_SetItemInt(__pyx_v_dl, 0, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 490, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0491:         if Lim and dl[1]>=LMinMax[1]:
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_Lim); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 491, __pyx_L1_error)
    if (__pyx_t_4) {
    } else {
      __pyx_t_9 = __pyx_t_4;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_14 = 1;
    __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_14)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 491, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyObject_RichCompare(PyList_GET_ITEM(__pyx_v_dl, 1), __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 491, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 491, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_9 = __pyx_t_4;
    __pyx_L11_bool_binop_done:;
    if (__pyx_t_9) {
/* … */
    }
+0492:             dl[1] = LMinMax[1]
      __pyx_t_15 = 1;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_15)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (unlikely(__Pyx_SetItemInt(__pyx_v_dl, 1, __pyx_t_1, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 492, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0493:         DLc = np.array(dl)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_dl) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_dl);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 493, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_DLc = __pyx_t_16;
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
  }
  __pyx_L4:;
 0494: 
 0495:     # Get the extreme indices of the mesh elements that really need to be
 0496:     # created within those limits
+0497:     abs0 = Cabs(DLc[0]-LMinMax[0])
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_v_abs0 = fabs(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_17)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_18)) )))));
+0498:     if abs0-dLr*Cfloor(abs0/dLr) < margin*dLr:
  __pyx_t_9 = (((__pyx_v_abs0 - (__pyx_v_dLr * floor((__pyx_v_abs0 / __pyx_v_dLr)))) < (__pyx_v_margin * __pyx_v_dLr)) != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L13;
  }
+0499:         nL0 = int(Cround((DLc[0] - LMinMax[0])/dLr))
    __pyx_t_19 = 0;
    __pyx_t_20 = 0;
    __pyx_v_nL0 = ((int)round((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_19)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_20)) )))) / __pyx_v_dLr)));
 0500:     else:
+0501:         nL0 = int(Cfloor((DLc[0] - LMinMax[0])/dLr))
  /*else*/ {
    __pyx_t_21 = 0;
    __pyx_t_22 = 0;
    __pyx_v_nL0 = ((int)floor((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_21)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_22)) )))) / __pyx_v_dLr)));
  }
  __pyx_L13:;
+0502:     abs1 = Cabs(DLc[1]-LMinMax[0])
  __pyx_t_23 = 1;
  __pyx_t_24 = 0;
  __pyx_v_abs1 = fabs(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_23)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_24)) )))));
+0503:     if abs1-dLr*Cfloor(abs1/dLr) < margin*dLr:
  __pyx_t_9 = (((__pyx_v_abs1 - (__pyx_v_dLr * floor((__pyx_v_abs1 / __pyx_v_dLr)))) < (__pyx_v_margin * __pyx_v_dLr)) != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L14;
  }
+0504:         nL1 = int(Cround((DLc[1] - LMinMax[0])/dLr)-1)
    __pyx_t_25 = 1;
    __pyx_t_26 = 0;
    __pyx_v_nL1 = ((int)(round((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_25)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_26)) )))) / __pyx_v_dLr)) - 1.0));
 0505:     else:
+0506:         nL1 = int(Cfloor((DLc[1] - LMinMax[0])/dLr))
  /*else*/ {
    __pyx_t_27 = 1;
    __pyx_t_28 = 0;
    __pyx_v_nL1 = ((int)floor((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_DLc.data) + __pyx_t_27)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_28)) )))) / __pyx_v_dLr)));
  }
  __pyx_L14:;
 0507:     # Get the corresponding indices
+0508:     Nind = nL1 + 1 - nL0
  __pyx_v_Nind = ((__pyx_v_nL1 + 1) - __pyx_v_nL0);
+0509:     indL = np.empty((Nind,),dtype=int)#np.linspace(nL0,nL1,Nind,endpoint=True)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Nind); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 509, __pyx_L1_error)
  __pyx_t_29 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_30 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_29, PyBUF_WRITABLE); if (unlikely(!__pyx_t_30.memview)) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_v_indL = __pyx_t_30;
  __pyx_t_30.memview = NULL;
  __pyx_t_30.data = NULL;
+0510:     L = np.empty((Nind,))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_Nind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_29 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_29, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
  __pyx_v_L = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+0511:     for ii in range(0, Nind):
  __pyx_t_31 = __pyx_v_Nind;
  __pyx_t_32 = __pyx_t_31;
  for (__pyx_t_33 = 0; __pyx_t_33 < __pyx_t_32; __pyx_t_33+=1) {
    __pyx_v_ii = __pyx_t_33;
+0512:         jj = nL0 + ii
    __pyx_v_jj = (__pyx_v_nL0 + __pyx_v_ii);
+0513:         indL[ii] = jj
    __pyx_t_34 = __pyx_v_ii;
    *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_indL.data) + __pyx_t_34)) )) = __pyx_v_jj;
+0514:         L[ii] = LMinMax[0] + (0.5 + (<double>jj))*dLr
    __pyx_t_35 = 0;
    __pyx_t_36 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_36)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_35)) ))) + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dLr));
  }
+0515:     return np.asarray(L), dLr, np.asarray(indL), <long>N
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_L, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_29 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_29);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dLr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_indL, 1, (PyObject *(*)(char *)) __pyx_memview_get_long, (int (*)(char *, PyObject *)) __pyx_memview_set_long, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_38 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_37))) {
    __pyx_t_38 = PyMethod_GET_SELF(__pyx_t_37);
    if (likely(__pyx_t_38)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_37);
      __Pyx_INCREF(__pyx_t_38);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_37, function);
    }
  }
  __pyx_t_1 = (__pyx_t_38) ? __Pyx_PyObject_Call2Args(__pyx_t_37, __pyx_t_38, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_37, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_38); __pyx_t_38 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_37); __pyx_t_37 = 0;
  __pyx_t_37 = __Pyx_PyInt_From_long(((long)__pyx_v_N)); if (unlikely(!__pyx_t_37)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_37);
  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_29);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_29);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_37);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_37);
  __pyx_t_29 = 0;
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_37 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0516: 
 0517: 
 0518: ########################################################
 0519: ########################################################
 0520: #       Meshing - Common - Polygon face
 0521: ########################################################
 0522: 
 0523: @cython.cdivision(True)
 0524: @cython.wraparound(False)
 0525: @cython.boundscheck(False)
+0526: def _Ves_meshCross_FromD(double[::1] MinMax1, double[::1] MinMax2, double d1,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_17_Ves_meshCross_FromD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_17_Ves_meshCross_FromD = {"_Ves_meshCross_FromD", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_17_Ves_meshCross_FromD, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_17_Ves_meshCross_FromD(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_MinMax1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_MinMax2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_d1;
  double __pyx_v_d2;
  PyObject *__pyx_v_D1 = 0;
  PyObject *__pyx_v_D2 = 0;
  PyObject *__pyx_v_dSMode = 0;
  PyObject *__pyx_v_VPoly = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_meshCross_FromD (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_MinMax1,&__pyx_n_s_MinMax2,&__pyx_n_s_d1,&__pyx_n_s_d2,&__pyx_n_s_D1,&__pyx_n_s_D2,&__pyx_n_s_dSMode,&__pyx_n_s_VPoly,&__pyx_n_s_margin,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_16_Ves_meshCross_FromD(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_MinMax1, __Pyx_memviewslice __pyx_v_MinMax2, double __pyx_v_d1, double __pyx_v_d2, PyObject *__pyx_v_D1, PyObject *__pyx_v_D2, PyObject *__pyx_v_dSMode, PyObject *__pyx_v_VPoly, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_X1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_X2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ind1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ind2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED int __pyx_v_N1;
  CYTHON_UNUSED int __pyx_v_N2;
  int __pyx_v_n1;
  int __pyx_v_n2;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_nn;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyObject *__pyx_v_d1r = NULL;
  PyObject *__pyx_v_d2r = NULL;
  PyObject *__pyx_v_iin = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_meshCross_FromD", 0);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_meshCross_FromD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_X1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_X2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ind1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ind2, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_d1r);
  __Pyx_XDECREF(__pyx_v_d2r);
  __Pyx_XDECREF(__pyx_v_iin);
  __PYX_XDEC_MEMVIEW(&__pyx_v_MinMax1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_MinMax2, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__174 = PyTuple_Pack(28, __pyx_n_s_MinMax1, __pyx_n_s_MinMax2, __pyx_n_s_d1, __pyx_n_s_d2, __pyx_n_s_D1, __pyx_n_s_D2, __pyx_n_s_dSMode, __pyx_n_s_VPoly, __pyx_n_s_margin, __pyx_n_s_X1, __pyx_n_s_X2, __pyx_n_s_dX1, __pyx_n_s_dX2, __pyx_n_s_ind1, __pyx_n_s_ind2, __pyx_n_s_N1, __pyx_n_s_N2, __pyx_n_s_n1, __pyx_n_s_n2, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_nn, __pyx_n_s_Pts, __pyx_n_s_dS, __pyx_n_s_ind, __pyx_n_s_d1r, __pyx_n_s_d2r, __pyx_n_s_iin); if (unlikely(!__pyx_tuple__174)) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__174);
  __Pyx_GIVEREF(__pyx_tuple__174);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_17_Ves_meshCross_FromD, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_meshCross_FromD, __pyx_t_1) < 0) __PYX_ERR(0, 526, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__175 = (PyObject*)__Pyx_PyCode_New(9, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_meshCross_FromD, 526, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__175)) __PYX_ERR(0, 526, __pyx_L1_error)
+0527:                          double d2, D1=None, D2=None,str dSMode='abs',
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject*)__pyx_n_s_abs);
+0528:                          VPoly=None, double margin=_VSMALL):
    values[7] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MinMax1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MinMax2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromD", 0, 4, 9, 1); __PYX_ERR(0, 526, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_d1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromD", 0, 4, 9, 2); __PYX_ERR(0, 526, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_d2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromD", 0, 4, 9, 3); __PYX_ERR(0, 526, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D1);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D2);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dSMode);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_meshCross_FromD") < 0)) __PYX_ERR(0, 526, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_MinMax1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_MinMax1.memview)) __PYX_ERR(0, 526, __pyx_L3_error)
    __pyx_v_MinMax2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_MinMax2.memview)) __PYX_ERR(0, 526, __pyx_L3_error)
    __pyx_v_d1 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_d1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 526, __pyx_L3_error)
    __pyx_v_d2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_d2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error)
    __pyx_v_D1 = values[4];
    __pyx_v_D2 = values[5];
    __pyx_v_dSMode = ((PyObject*)values[6]);
    __pyx_v_VPoly = values[7];
    if (values[8]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 528, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__38;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromD", 0, 4, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 526, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_meshCross_FromD", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dSMode), (&PyString_Type), 1, "dSMode", 1))) __PYX_ERR(0, 527, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_16_Ves_meshCross_FromD(__pyx_self, __pyx_v_MinMax1, __pyx_v_MinMax2, __pyx_v_d1, __pyx_v_d2, __pyx_v_D1, __pyx_v_D2, __pyx_v_dSMode, __pyx_v_VPoly, __pyx_v_margin);
/* … */
  __pyx_k__38 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0529:     cdef double[::1] X1, X2
 0530:     cdef double dX1, dX2
 0531:     cdef long[::1] ind1, ind2
 0532:     cdef int N1, N2, n1, n2, ii, jj, nn
 0533:     cdef np.ndarray[double,ndim=2] Pts
 0534:     cdef np.ndarray[double,ndim=1] dS
 0535:     cdef np.ndarray[long,ndim=1] ind
 0536: 
+0537:     X1, d1r, ind1, N1 = _Ves_mesh_dlfromL_cython(MinMax1, d1, D1, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_MinMax1, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_d1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_v_D1);
  __Pyx_GIVEREF(__pyx_v_D1);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_D1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 537, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 537, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 537, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 537, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 537, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_X1 = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_d1r = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_ind1 = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_N1 = __pyx_t_10;
+0538:                                                  dLMode=dSMode, margin=margin)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dLMode, __pyx_v_dSMode) < 0) __PYX_ERR(0, 537, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_2) < 0) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0539:     X2, d2r, ind2, N2 = _Ves_mesh_dlfromL_cython(MinMax2, d2, D2, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_MinMax2, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_d2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_D2);
  __Pyx_GIVEREF(__pyx_v_D2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_D2);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 539, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 539, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 539, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 539, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 539, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_X2 = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_d2r = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_ind2 = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_N2 = __pyx_t_10;
+0540:                                                  dLMode=dSMode, margin=margin)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dLMode, __pyx_v_dSMode) < 0) __PYX_ERR(0, 539, __pyx_L1_error)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 539, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0541:     n1, n2 = len(X1), len(X2)
  __pyx_t_11 = __Pyx_MemoryView_Len(__pyx_v_X1); 
  __pyx_t_12 = __Pyx_MemoryView_Len(__pyx_v_X2); 
  __pyx_v_n1 = __pyx_t_11;
  __pyx_v_n2 = __pyx_t_12;
 0542: 
+0543:     Pts = np.empty((2,n1*n2))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_n1 * __pyx_v_n2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 543, __pyx_L1_error)
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __pyx_t_14 = __pyx_t_15 = __pyx_t_16 = 0;
    }
    __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 543, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+0544:     dS = d1r*d2r*np.ones((n1*n2,))
  __pyx_t_5 = PyNumber_Multiply(__pyx_v_d1r, __pyx_v_d2r); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_n1 * __pyx_v_n2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 544, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 544, __pyx_L1_error)
  __pyx_t_17 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
      }
      __pyx_t_16 = __pyx_t_15 = __pyx_t_14 = 0;
    }
    __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 544, __pyx_L1_error)
  }
  __pyx_t_17 = 0;
  __pyx_v_dS = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0545:     ind = np.empty((n1*n2,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_n1 * __pyx_v_n2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 545, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 545, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __pyx_t_14 = __pyx_t_15 = __pyx_t_16 = 0;
    }
    __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 545, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_ind = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+0546:     for ii in range(0,n2):
  __pyx_t_10 = __pyx_v_n2;
  __pyx_t_19 = __pyx_t_10;
  for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
    __pyx_v_ii = __pyx_t_20;
+0547:         for jj in range(0,n1):
    __pyx_t_21 = __pyx_v_n1;
    __pyx_t_22 = __pyx_t_21;
    for (__pyx_t_23 = 0; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
      __pyx_v_jj = __pyx_t_23;
+0548:             nn = jj+n1*ii
      __pyx_v_nn = (__pyx_v_jj + (__pyx_v_n1 * __pyx_v_ii));
+0549:             Pts[0,nn] = X1[jj]
      __pyx_t_24 = __pyx_v_jj;
      __pyx_t_25 = 0;
      __pyx_t_26 = __pyx_v_nn;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_X1.data) + __pyx_t_24)) )));
+0550:             Pts[1,nn] = X2[ii]
      __pyx_t_27 = __pyx_v_ii;
      __pyx_t_28 = 1;
      __pyx_t_29 = __pyx_v_nn;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_X2.data) + __pyx_t_27)) )));
+0551:             ind[nn] = ind1[jj] + n1*ind2[ii]
      __pyx_t_30 = __pyx_v_jj;
      __pyx_t_31 = __pyx_v_ii;
      __pyx_t_32 = __pyx_v_nn;
      *__Pyx_BufPtrStrided1d(long *, __pyx_pybuffernd_ind.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_ind.diminfo[0].strides) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind1.data) + __pyx_t_30)) ))) + (__pyx_v_n1 * (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind2.data) + __pyx_t_31)) )))));
    }
  }
+0552:     if VPoly is not None:
  __pyx_t_33 = (__pyx_v_VPoly != Py_None);
  __pyx_t_34 = (__pyx_t_33 != 0);
  if (__pyx_t_34) {
/* … */
  }
+0553:         iin = Path(VPoly.T).contains_points(Pts.T, transform=None, radius=0.0)
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_Pts), __pyx_n_s_T); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 553, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 553, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_iin = __pyx_t_2;
    __pyx_t_2 = 0;
+0554:         if np.sum(iin)==1:
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sum); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_v_iin) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_iin);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_34 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_34) {
/* … */
      goto __pyx_L12;
    }
+0555:             Pts, dS, ind = Pts[:,iin].reshape((2,1)), dS[iin], ind[iin]
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
      __Pyx_INCREF(__pyx_v_iin);
      __Pyx_GIVEREF(__pyx_v_iin);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_iin);
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_tuple__39) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_tuple__39);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 555, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dS), __pyx_v_iin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 555, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_iin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 555, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 555, __pyx_L1_error)
      __pyx_t_13 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
          }
          __pyx_t_16 = __pyx_t_15 = __pyx_t_14 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 555, __pyx_L1_error)
      }
      __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
      __pyx_t_17 = ((PyArrayObject *)__pyx_t_2);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
          }
          __pyx_t_14 = __pyx_t_15 = __pyx_t_16 = 0;
        }
        __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 555, __pyx_L1_error)
      }
      __pyx_t_17 = 0;
      __Pyx_DECREF_SET(__pyx_v_dS, ((PyArrayObject *)__pyx_t_2));
      __pyx_t_2 = 0;
      __pyx_t_18 = ((PyArrayObject *)__pyx_t_1);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
          }
          __pyx_t_16 = __pyx_t_15 = __pyx_t_14 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 555, __pyx_L1_error)
      }
      __pyx_t_18 = 0;
      __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_1));
      __pyx_t_1 = 0;
/* … */
  __pyx_tuple__39 = PyTuple_Pack(2, __pyx_int_2, __pyx_int_1); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(0, 555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__39);
  __Pyx_GIVEREF(__pyx_tuple__39);
 0556:         else:
+0557:             Pts, dS, ind = Pts[:,iin], dS[iin], ind[iin]
    /*else*/ {
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_slice__8);
      __Pyx_INCREF(__pyx_v_iin);
      __Pyx_GIVEREF(__pyx_v_iin);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_iin);
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 557, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dS), __pyx_v_iin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 557, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_iin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 557, __pyx_L1_error)
      __pyx_t_13 = ((PyArrayObject *)__pyx_t_2);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
          }
          __pyx_t_14 = __pyx_t_15 = __pyx_t_16 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 557, __pyx_L1_error)
      }
      __pyx_t_13 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_2));
      __pyx_t_2 = 0;
      __pyx_t_17 = ((PyArrayObject *)__pyx_t_1);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_16, &__pyx_t_15, &__pyx_t_14);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_16, __pyx_t_15, __pyx_t_14);
          }
          __pyx_t_16 = __pyx_t_15 = __pyx_t_14 = 0;
        }
        __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 557, __pyx_L1_error)
      }
      __pyx_t_17 = 0;
      __Pyx_DECREF_SET(__pyx_v_dS, ((PyArrayObject *)__pyx_t_1));
      __pyx_t_1 = 0;
      __pyx_t_18 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_10 < 0)) {
          PyErr_Fetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
          }
          __pyx_t_14 = __pyx_t_15 = __pyx_t_16 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 557, __pyx_L1_error)
      }
      __pyx_t_18 = 0;
      __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L12:;
+0558:     return Pts, dS, ind, d1r, d2r
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyTuple_New(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_ind));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_ind));
  __Pyx_INCREF(__pyx_v_d1r);
  __Pyx_GIVEREF(__pyx_v_d1r);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_d1r);
  __Pyx_INCREF(__pyx_v_d2r);
  __Pyx_GIVEREF(__pyx_v_d2r);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_d2r);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0559: 
 0560: 
 0561: @cython.cdivision(True)
 0562: @cython.wraparound(False)
 0563: @cython.boundscheck(False)
+0564: def _Ves_meshCross_FromInd(double[::1] MinMax1, double[::1] MinMax2, double d1,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_19_Ves_meshCross_FromInd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_19_Ves_meshCross_FromInd = {"_Ves_meshCross_FromInd", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_19_Ves_meshCross_FromInd, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_19_Ves_meshCross_FromInd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_MinMax1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_MinMax2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_d1;
  double __pyx_v_d2;
  __Pyx_memviewslice __pyx_v_ind = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_dSMode = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_meshCross_FromInd (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_MinMax1,&__pyx_n_s_MinMax2,&__pyx_n_s_d1,&__pyx_n_s_d2,&__pyx_n_s_ind,&__pyx_n_s_dSMode,&__pyx_n_s_margin,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[5] = ((PyObject*)__pyx_n_s_abs);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MinMax1)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_MinMax2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromInd", 0, 5, 7, 1); __PYX_ERR(0, 564, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_d1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromInd", 0, 5, 7, 2); __PYX_ERR(0, 564, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_d2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromInd", 0, 5, 7, 3); __PYX_ERR(0, 564, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromInd", 0, 5, 7, 4); __PYX_ERR(0, 564, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dSMode);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_meshCross_FromInd") < 0)) __PYX_ERR(0, 564, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_MinMax1 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_MinMax1.memview)) __PYX_ERR(0, 564, __pyx_L3_error)
    __pyx_v_MinMax2 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_MinMax2.memview)) __PYX_ERR(0, 564, __pyx_L3_error)
    __pyx_v_d1 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_d1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 564, __pyx_L3_error)
    __pyx_v_d2 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_d2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error)
    __pyx_v_ind = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ind.memview)) __PYX_ERR(0, 565, __pyx_L3_error)
    __pyx_v_dSMode = ((PyObject*)values[5]);
    if (values[6]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__40;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_meshCross_FromInd", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 564, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_meshCross_FromInd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dSMode), (&PyString_Type), 1, "dSMode", 1))) __PYX_ERR(0, 565, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_18_Ves_meshCross_FromInd(__pyx_self, __pyx_v_MinMax1, __pyx_v_MinMax2, __pyx_v_d1, __pyx_v_d2, __pyx_v_ind, __pyx_v_dSMode, __pyx_v_margin);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_18_Ves_meshCross_FromInd(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_MinMax1, __Pyx_memviewslice __pyx_v_MinMax2, double __pyx_v_d1, double __pyx_v_d2, __Pyx_memviewslice __pyx_v_ind, PyObject *__pyx_v_dSMode, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_X1 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_X2 = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_bla = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_N1;
  CYTHON_UNUSED int __pyx_v_N2;
  int __pyx_v_NP;
  int __pyx_v_ii;
  int __pyx_v_i1;
  int __pyx_v_i2;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyObject *__pyx_v_d1r = NULL;
  PyObject *__pyx_v_d2r = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_meshCross_FromInd", 0);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_meshCross_FromInd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_X1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_X2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_bla, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF(__pyx_v_d1r);
  __Pyx_XDECREF(__pyx_v_d2r);
  __PYX_XDEC_MEMVIEW(&__pyx_v_MinMax1, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_MinMax2, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ind, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__176 = PyTuple_Pack(22, __pyx_n_s_MinMax1, __pyx_n_s_MinMax2, __pyx_n_s_d1, __pyx_n_s_d2, __pyx_n_s_ind, __pyx_n_s_dSMode, __pyx_n_s_margin, __pyx_n_s_X1, __pyx_n_s_X2, __pyx_n_s_dX1, __pyx_n_s_dX2, __pyx_n_s_bla, __pyx_n_s_N1, __pyx_n_s_N2, __pyx_n_s_NP, __pyx_n_s_ii, __pyx_n_s_i1, __pyx_n_s_i2, __pyx_n_s_Pts, __pyx_n_s_dS, __pyx_n_s_d1r, __pyx_n_s_d2r); if (unlikely(!__pyx_tuple__176)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__176);
  __Pyx_GIVEREF(__pyx_tuple__176);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_19_Ves_meshCross_FromInd, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_meshCross_FromInd, __pyx_t_1) < 0) __PYX_ERR(0, 564, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__177 = (PyObject*)__Pyx_PyCode_New(7, 0, 22, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_meshCross_FromInd, 564, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__177)) __PYX_ERR(0, 564, __pyx_L1_error)
 0565:                            double d2, long[::1] ind, str dSMode='abs',
+0566:                            double margin=_VSMALL):
  __pyx_k__40 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0567:     cdef double[::1] X1, X2
 0568:     cdef double dX1, dX2
 0569:     cdef long[::1] bla
+0570:     cdef int N1, N2, NP=ind.size, ii, i1, i2
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_ind, 1, (PyObject *(*)(char *)) __pyx_memview_get_long, (int (*)(char *, PyObject *)) __pyx_memview_set_long, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 570, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_NP = __pyx_t_3;
 0571:     cdef np.ndarray[double,ndim=2] Pts
 0572:     cdef np.ndarray[double,ndim=1] dS
 0573: 
+0574:     X1, d1r, bla, N1 = _Ves_mesh_dlfromL_cython(MinMax1, d1, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_MinMax1, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_d1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_5, 2, Py_None);
  __pyx_t_1 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
/* … */
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 574, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_6);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_2,&__pyx_t_6};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 574, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_5,&__pyx_t_2,&__pyx_t_6};
    __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 4) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
    __pyx_t_8 = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 574, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_X1 = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_d1r = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_bla = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_N1 = __pyx_t_3;
+0575:                                                 dLMode=dSMode, margin=margin)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dLMode, __pyx_v_dSMode) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 575, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_margin, __pyx_t_1) < 0) __PYX_ERR(0, 574, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0576:     X2, d2r, bla, N2 = _Ves_mesh_dlfromL_cython(MinMax2, d2, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_MinMax2, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_d2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_5, 2, Py_None);
  __pyx_t_6 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 576, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_4};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 576, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_1,&__pyx_t_4};
    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 576, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_8(__pyx_t_7); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 4) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
    __pyx_t_8 = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 576, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_X2 = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_d2r = __pyx_t_5;
  __pyx_t_5 = 0;
  __PYX_XDEC_MEMVIEW(&__pyx_v_bla, 1);
  __pyx_v_bla = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_N2 = __pyx_t_3;
+0577:                                                 dLMode=dSMode, margin=margin)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dLMode, __pyx_v_dSMode) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 577, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_6) < 0) __PYX_ERR(0, 576, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 0578: 
+0579:     Pts = np.empty((2,NP))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 579, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 579, __pyx_L1_error)
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_3 < 0)) {
      PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
      }
      __pyx_t_12 = __pyx_t_13 = __pyx_t_14 = 0;
    }
    __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 579, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
+0580:     dS = d1r*d2r*np.ones((NP,))
  __pyx_t_6 = PyNumber_Multiply(__pyx_v_d1r, __pyx_v_d2r); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 580, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 580, __pyx_L1_error)
  __pyx_t_15 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_15, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_3 < 0)) {
      PyErr_Fetch(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_14, __pyx_t_13, __pyx_t_12);
      }
      __pyx_t_14 = __pyx_t_13 = __pyx_t_12 = 0;
    }
    __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 580, __pyx_L1_error)
  }
  __pyx_t_15 = 0;
  __pyx_v_dS = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+0581:     for ii in range(0,NP):
  __pyx_t_3 = __pyx_v_NP;
  __pyx_t_16 = __pyx_t_3;
  for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
    __pyx_v_ii = __pyx_t_17;
+0582:         i2 = ind[ii] // N1
    __pyx_t_18 = __pyx_v_ii;
    __pyx_v_i2 = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_18)) ))) / __pyx_v_N1);
+0583:         i1 = ind[ii]-i2*N1
    __pyx_t_19 = __pyx_v_ii;
    __pyx_v_i1 = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_19)) ))) - (__pyx_v_i2 * __pyx_v_N1));
+0584:         Pts[0,ii] = X1[i1]
    __pyx_t_20 = __pyx_v_i1;
    __pyx_t_21 = 0;
    __pyx_t_22 = __pyx_v_ii;
    *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_X1.data) + __pyx_t_20)) )));
+0585:         Pts[1,ii] = X2[i2]
    __pyx_t_23 = __pyx_v_i2;
    __pyx_t_24 = 1;
    __pyx_t_25 = __pyx_v_ii;
    *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_X2.data) + __pyx_t_23)) )));
  }
+0586:     return Pts, dS, d1r, d2r
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 586, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(__pyx_v_d1r);
  __Pyx_GIVEREF(__pyx_v_d1r);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_d1r);
  __Pyx_INCREF(__pyx_v_d2r);
  __Pyx_GIVEREF(__pyx_v_d2r);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_d2r);
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 0587: 
 0588: 
 0589: 
 0590: @cython.cdivision(True)
 0591: @cython.wraparound(False)
 0592: @cython.boundscheck(False)
+0593: def _Ves_Smesh_Cross(double[:,::1] VPoly, double dL, str dLMode='abs', D1=None,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_21_Ves_Smesh_Cross(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_21_Ves_Smesh_Cross = {"_Ves_Smesh_Cross", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_21_Ves_Smesh_Cross, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_21_Ves_Smesh_Cross(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  PyObject *__pyx_v_dLMode = 0;
  PyObject *__pyx_v_D1 = 0;
  PyObject *__pyx_v_D2 = 0;
  double __pyx_v_margin;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Cross (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_VPoly,&__pyx_n_s_dL,&__pyx_n_s_dLMode,&__pyx_n_s_D1,&__pyx_n_s_D2,&__pyx_n_s_margin,&__pyx_n_s_DIn,&__pyx_n_s_VIn,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[2] = ((PyObject*)__pyx_n_s_abs);
    values[3] = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_20_Ves_Smesh_Cross(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_VPoly, double __pyx_v_dL, PyObject *__pyx_v_dLMode, PyObject *__pyx_v_D1, PyObject *__pyx_v_D2, double __pyx_v_margin, double __pyx_v_DIn, PyObject *__pyx_v_VIn) {
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_nn;
  int __pyx_v_NP;
  __Pyx_memviewslice __pyx_v_LMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_L = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_v0;
  double __pyx_v_v1;
  double __pyx_v_dlr;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indL = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_N = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_PtsCross = 0;
  PyObject *__pyx_v_LPtsCross = 0;
  PyObject *__pyx_v_LdLr = 0;
  PyObject *__pyx_v_Lind = 0;
  PyObject *__pyx_v_LRref = 0;
  PyObject *__pyx_v_VPolybis = 0;
  PyObject *__pyx_v_indin = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_N;
  __Pyx_Buffer __pyx_pybuffer_N;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsCross;
  __Pyx_Buffer __pyx_pybuffer_PtsCross;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Cross", 0);
  __pyx_pybuffer_N.pybuffer.buf = NULL;
  __pyx_pybuffer_N.refcount = 0;
  __pyx_pybuffernd_N.data = NULL;
  __pyx_pybuffernd_N.rcbuffer = &__pyx_pybuffer_N;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_PtsCross.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsCross.refcount = 0;
  __pyx_pybuffernd_PtsCross.data = NULL;
  __pyx_pybuffernd_PtsCross.rcbuffer = &__pyx_pybuffer_PtsCross;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_5, 1);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __PYX_XDEC_MEMVIEW(&__pyx_t_28, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_N.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Cross", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_N.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_LMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_L, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indL, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_N);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsCross);
  __Pyx_XDECREF(__pyx_v_LPtsCross);
  __Pyx_XDECREF(__pyx_v_LdLr);
  __Pyx_XDECREF(__pyx_v_Lind);
  __Pyx_XDECREF(__pyx_v_LRref);
  __Pyx_XDECREF(__pyx_v_VPolybis);
  __Pyx_XDECREF(__pyx_v_indin);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__178 = PyTuple_Pack(29, __pyx_n_s_VPoly, __pyx_n_s_dL, __pyx_n_s_dLMode, __pyx_n_s_D1, __pyx_n_s_D2, __pyx_n_s_margin, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_nn, __pyx_n_s_NP, __pyx_n_s_LMinMax, __pyx_n_s_L, __pyx_n_s_v0, __pyx_n_s_v1, __pyx_n_s_dlr, __pyx_n_s_indL, __pyx_n_s_N, __pyx_n_s_ind, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_PtsCross, __pyx_n_s_LPtsCross, __pyx_n_s_LdLr, __pyx_n_s_Lind, __pyx_n_s_LRref, __pyx_n_s_VPolybis, __pyx_n_s_indin); if (unlikely(!__pyx_tuple__178)) __PYX_ERR(0, 593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__178);
  __Pyx_GIVEREF(__pyx_tuple__178);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_21_Ves_Smesh_Cross, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_Cross, __pyx_t_1) < 0) __PYX_ERR(0, 593, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__179 = (PyObject*)__Pyx_PyCode_New(8, 0, 29, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_Cross, 593, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__179)) __PYX_ERR(0, 593, __pyx_L1_error)
+0594:                      D2=None, double margin=_VSMALL, double DIn=0., VIn=None):
    values[4] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Cross", 0, 2, 8, 1); __PYX_ERR(0, 593, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dLMode);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D1);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D2);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_Cross") < 0)) __PYX_ERR(0, 593, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 593, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error)
    __pyx_v_dLMode = ((PyObject*)values[2]);
    __pyx_v_D1 = values[3];
    __pyx_v_D2 = values[4];
    if (values[5]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__41;
    }
    if (values[6]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[7];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Cross", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 593, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Cross", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dLMode), (&PyString_Type), 1, "dLMode", 1))) __PYX_ERR(0, 593, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_20_Ves_Smesh_Cross(__pyx_self, __pyx_v_VPoly, __pyx_v_dL, __pyx_v_dLMode, __pyx_v_D1, __pyx_v_D2, __pyx_v_margin, __pyx_v_DIn, __pyx_v_VIn);
/* … */
  __pyx_k__41 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+0595:     cdef int ii, jj, nn=0, NP=VPoly.shape[1]
  __pyx_v_nn = 0;
  __pyx_v_NP = (__pyx_v_VPoly.shape[1]);
 0596:     cdef double[::1] LMinMax, L
 0597:     cdef double v0, v1, dlr
 0598:     cdef long[::1] indL
 0599:     cdef np.ndarray[long,ndim=1] N, ind
 0600:     cdef np.ndarray[double,ndim=1] dLr, Rref
 0601:     cdef np.ndarray[double,ndim=2] PtsCross
+0602:     cdef list LPtsCross=[], LdLr=[], Lind=[], LRref=[], VPolybis=[]
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LPtsCross = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LdLr = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Lind = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LRref = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_VPolybis = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 0603: 
+0604:     LMinMax = np.array([0.,1.],dtype=float)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_float_0_);
  __Pyx_GIVEREF(__pyx_float_0_);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_float_0_);
  __Pyx_INCREF(__pyx_float_1_);
  __Pyx_GIVEREF(__pyx_float_1_);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_float_1_);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 604, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 604, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_LMinMax = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+0605:     N = np.empty((NP-1,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_NP - 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 605, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 605, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_N.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_N.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_N.rcbuffer->pybuffer, (PyObject*)__pyx_v_N, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
    }
    __pyx_pybuffernd_N.diminfo[0].strides = __pyx_pybuffernd_N.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_N.diminfo[0].shape = __pyx_pybuffernd_N.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 605, __pyx_L1_error)
  }
  __pyx_t_6 = 0;
  __pyx_v_N = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+0606:     if DIn==0.:
  __pyx_t_11 = ((__pyx_v_DIn == 0.) != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L3;
  }
+0607:         for ii in range(0,NP-1):
    __pyx_t_12 = (__pyx_v_NP - 1);
    __pyx_t_13 = __pyx_t_12;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_13; __pyx_t_7+=1) {
      __pyx_v_ii = __pyx_t_7;
+0608:             v0, v1 = VPoly[0,ii+1]-VPoly[0,ii], VPoly[1,ii+1]-VPoly[1,ii]
      __pyx_t_14 = 0;
      __pyx_t_15 = (__pyx_v_ii + 1);
      __pyx_t_16 = 0;
      __pyx_t_17 = __pyx_v_ii;
      __pyx_t_18 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_14 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_15)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_16 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_17)) ))));
      __pyx_t_19 = 1;
      __pyx_t_20 = (__pyx_v_ii + 1);
      __pyx_t_21 = 1;
      __pyx_t_22 = __pyx_v_ii;
      __pyx_t_23 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_19 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_20)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_21 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_22)) ))));
      __pyx_v_v0 = __pyx_t_18;
      __pyx_v_v1 = __pyx_t_23;
+0609:             LMinMax[1] = Csqrt(v0**2 + v1**2)
      __pyx_t_24 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_24)) )) = sqrt((pow(__pyx_v_v0, 2.0) + pow(__pyx_v_v1, 2.0)));
+0610:             L, dlr, indL, N[ii] = _Ves_mesh_dlfromL_cython(LMinMax, dL,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_LMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
/* … */
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 610, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_25 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_25 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_25);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_1,&__pyx_t_2,&__pyx_t_25};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 610, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_1,&__pyx_t_2,&__pyx_t_25};
        __pyx_t_26 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 610, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_27 = Py_TYPE(__pyx_t_26)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_27(__pyx_t_26); if (unlikely(!item)) goto __pyx_L6_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_27(__pyx_t_26), 4) < 0) __PYX_ERR(0, 610, __pyx_L1_error)
        __pyx_t_27 = NULL;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        goto __pyx_L7_unpacking_done;
        __pyx_L6_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_27 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 610, __pyx_L1_error)
        __pyx_L7_unpacking_done:;
      }
      __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_28 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_28.memview)) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_29 = __Pyx_PyInt_As_long(__pyx_t_25); if (unlikely((__pyx_t_29 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 610, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_L, 1);
      __pyx_v_L = __pyx_t_5;
      __pyx_t_5.memview = NULL;
      __pyx_t_5.data = NULL;
      __pyx_v_dlr = __pyx_t_23;
      __PYX_XDEC_MEMVIEW(&__pyx_v_indL, 1);
      __pyx_v_indL = __pyx_t_28;
      __pyx_t_28.memview = NULL;
      __pyx_t_28.data = NULL;
      __pyx_t_30 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(long *, __pyx_pybuffernd_N.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_N.diminfo[0].strides) = __pyx_t_29;
+0611:                                                            dLMode=dLMode,
      __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 611, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dLMode, __pyx_v_dLMode) < 0) __PYX_ERR(0, 611, __pyx_L1_error)
+0612:                                                            DL=None, Lim=True,
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 611, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 611, __pyx_L1_error)
+0613:                                                            margin=margin)
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 611, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0614:             VPolybis.append((VPoly[0,ii],VPoly[1,ii]))
      __pyx_t_31 = 0;
      __pyx_t_32 = __pyx_v_ii;
      __pyx_t_3 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_31 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_32)) )))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 614, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_33 = 1;
      __pyx_t_34 = __pyx_v_ii;
      __pyx_t_25 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_33 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_34)) )))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 614, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 614, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_25);
      __pyx_t_3 = 0;
      __pyx_t_25 = 0;
      __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 614, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0615:             v0, v1 = v0/LMinMax[1], v1/LMinMax[1]
      __pyx_t_36 = 1;
      __pyx_t_23 = (__pyx_v_v0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_36)) ))));
      __pyx_t_37 = 1;
      __pyx_t_18 = (__pyx_v_v1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_37)) ))));
      __pyx_v_v0 = __pyx_t_23;
      __pyx_v_v1 = __pyx_t_18;
+0616:             for jj in range(0,N[ii]):
      __pyx_t_38 = __pyx_v_ii;
      __pyx_t_29 = (*__Pyx_BufPtrStrided1d(long *, __pyx_pybuffernd_N.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_N.diminfo[0].strides));
      __pyx_t_39 = __pyx_t_29;
      for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
        __pyx_v_jj = __pyx_t_40;
+0617:                 LdLr.append(dlr)
        __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dlr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 617, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LdLr, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 617, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0618:                 LRref.append(VPoly[0,ii] + L[jj]*v0)
        __pyx_t_41 = 0;
        __pyx_t_42 = __pyx_v_ii;
        __pyx_t_43 = __pyx_v_jj;
        __pyx_t_2 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_41 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_42)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_43)) ))) * __pyx_v_v0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 618, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LRref, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 618, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0619:                 LPtsCross.append((VPoly[0,ii] + L[jj]*v0,
        __pyx_t_44 = 0;
        __pyx_t_45 = __pyx_v_ii;
        __pyx_t_46 = __pyx_v_jj;
        __pyx_t_2 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_44 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_45)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_46)) ))) * __pyx_v_v0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 619, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 619, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_25);
        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_25);
        __pyx_t_2 = 0;
        __pyx_t_25 = 0;
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LPtsCross, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 619, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0620:                                   VPoly[1,ii] + L[jj]*v1))
        __pyx_t_47 = 1;
        __pyx_t_48 = __pyx_v_ii;
        __pyx_t_49 = __pyx_v_jj;
        __pyx_t_25 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_47 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_48)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_49)) ))) * __pyx_v_v1))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 620, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
+0621:                 Lind.append(nn)
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 621, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_Lind, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 621, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0622:                 nn += 1
        __pyx_v_nn = (__pyx_v_nn + 1);
+0623:                 VPolybis.append((VPoly[0,ii] + jj*dlr*v0,
        __pyx_t_50 = 0;
        __pyx_t_51 = __pyx_v_ii;
        __pyx_t_3 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_50 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_51)) ))) + ((__pyx_v_jj * __pyx_v_dlr) * __pyx_v_v0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
/* … */
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 623, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_25);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_25);
        __pyx_t_3 = 0;
        __pyx_t_25 = 0;
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 623, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
    }
+0624:                                  VPoly[1,ii] + jj*dlr*v1))
        __pyx_t_52 = 1;
        __pyx_t_53 = __pyx_v_ii;
        __pyx_t_25 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_52 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_53)) ))) + ((__pyx_v_jj * __pyx_v_dlr) * __pyx_v_v1))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 624, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
+0625:         VPolybis.append((VPoly[0,0],VPoly[1,0]))
    __pyx_t_54 = 0;
    __pyx_t_55 = 0;
    __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_54 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_55)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_56 = 1;
    __pyx_t_57 = 0;
    __pyx_t_25 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_56 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_57)) )))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_25);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_25);
    __pyx_t_2 = 0;
    __pyx_t_25 = 0;
    __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 625, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0626:     else:
+0627:         for ii in range(0,NP-1):
  /*else*/ {
    __pyx_t_12 = (__pyx_v_NP - 1);
    __pyx_t_13 = __pyx_t_12;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_13; __pyx_t_7+=1) {
      __pyx_v_ii = __pyx_t_7;
+0628:             v0, v1 = VPoly[0,ii+1]-VPoly[0,ii], VPoly[1,ii+1]-VPoly[1,ii]
      __pyx_t_58 = 0;
      __pyx_t_59 = (__pyx_v_ii + 1);
      __pyx_t_60 = 0;
      __pyx_t_61 = __pyx_v_ii;
      __pyx_t_18 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_58 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_59)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_60 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_61)) ))));
      __pyx_t_62 = 1;
      __pyx_t_63 = (__pyx_v_ii + 1);
      __pyx_t_64 = 1;
      __pyx_t_65 = __pyx_v_ii;
      __pyx_t_23 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_62 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_63)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_64 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_65)) ))));
      __pyx_v_v0 = __pyx_t_18;
      __pyx_v_v1 = __pyx_t_23;
+0629:             LMinMax[1] = Csqrt(v0**2 + v1**2)
      __pyx_t_66 = 1;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_66)) )) = sqrt((pow(__pyx_v_v0, 2.0) + pow(__pyx_v_v1, 2.0)));
+0630:             L, dlr, indL, N[ii] = _Ves_mesh_dlfromL_cython(LMinMax, dL,
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_25 = __pyx_memoryview_fromslice(__pyx_v_LMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_25);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
      __pyx_t_25 = 0;
      __pyx_t_2 = 0;
/* … */
      __pyx_t_25 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_25))) || (PyList_CheckExact(__pyx_t_25))) {
        PyObject* sequence = __pyx_t_25;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 630, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_4 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_1,&__pyx_t_3,&__pyx_t_4};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 630, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_1,&__pyx_t_3,&__pyx_t_4};
        __pyx_t_26 = PyObject_GetIter(__pyx_t_25); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 630, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
        __pyx_t_27 = Py_TYPE(__pyx_t_26)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_27(__pyx_t_26); if (unlikely(!item)) goto __pyx_L12_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_27(__pyx_t_26), 4) < 0) __PYX_ERR(0, 630, __pyx_L1_error)
        __pyx_t_27 = NULL;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        goto __pyx_L13_unpacking_done;
        __pyx_L12_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_27 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 630, __pyx_L1_error)
        __pyx_L13_unpacking_done:;
      }
      __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_28 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_28.memview)) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_29 = __Pyx_PyInt_As_long(__pyx_t_4); if (unlikely((__pyx_t_29 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 630, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_L, 1);
      __pyx_v_L = __pyx_t_5;
      __pyx_t_5.memview = NULL;
      __pyx_t_5.data = NULL;
      __pyx_v_dlr = __pyx_t_23;
      __PYX_XDEC_MEMVIEW(&__pyx_v_indL, 1);
      __pyx_v_indL = __pyx_t_28;
      __pyx_t_28.memview = NULL;
      __pyx_t_28.data = NULL;
      __pyx_t_67 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(long *, __pyx_pybuffernd_N.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_N.diminfo[0].strides) = __pyx_t_29;
+0631:                                                            dLMode=dLMode,
      __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 631, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dLMode, __pyx_v_dLMode) < 0) __PYX_ERR(0, 631, __pyx_L1_error)
+0632:                                                            DL=None, Lim=True,
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 631, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 631, __pyx_L1_error)
+0633:                                                            margin=margin)
      __pyx_t_25 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_25) < 0) __PYX_ERR(0, 631, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
+0634:             VPolybis.append((VPoly[0,ii],VPoly[1,ii]))
      __pyx_t_68 = 0;
      __pyx_t_69 = __pyx_v_ii;
      __pyx_t_25 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_68 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_69)) )))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_70 = 1;
      __pyx_t_71 = __pyx_v_ii;
      __pyx_t_4 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_70 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_71)) )))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_25);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
      __pyx_t_25 = 0;
      __pyx_t_4 = 0;
      __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 634, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0635:             v0, v1 = v0/LMinMax[1], v1/LMinMax[1]
      __pyx_t_72 = 1;
      __pyx_t_23 = (__pyx_v_v0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_72)) ))));
      __pyx_t_73 = 1;
      __pyx_t_18 = (__pyx_v_v1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_73)) ))));
      __pyx_v_v0 = __pyx_t_23;
      __pyx_v_v1 = __pyx_t_18;
+0636:             for jj in range(0,N[ii]):
      __pyx_t_74 = __pyx_v_ii;
      __pyx_t_29 = (*__Pyx_BufPtrStrided1d(long *, __pyx_pybuffernd_N.rcbuffer->pybuffer.buf, __pyx_t_74, __pyx_pybuffernd_N.diminfo[0].strides));
      __pyx_t_39 = __pyx_t_29;
      for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
        __pyx_v_jj = __pyx_t_40;
+0637:                 LdLr.append(dlr)
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dlr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LdLr, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 637, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0638:                 LRref.append(VPoly[0,ii] + L[jj]*v0)
        __pyx_t_75 = 0;
        __pyx_t_76 = __pyx_v_ii;
        __pyx_t_77 = __pyx_v_jj;
        __pyx_t_3 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_75 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_76)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_77)) ))) * __pyx_v_v0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 638, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LRref, __pyx_t_3); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 638, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0639:                 LPtsCross.append((VPoly[0,ii] + L[jj]*v0 + DIn*VIn[0,ii],
        __pyx_t_78 = 0;
        __pyx_t_79 = __pyx_v_ii;
        __pyx_t_80 = __pyx_v_jj;
        __pyx_t_3 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_78 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_79)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_80)) ))) * __pyx_v_v0))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_25 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_25);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_25);
        __pyx_t_25 = 0;
        __pyx_t_25 = __Pyx_PyObject_GetItem(__pyx_v_VIn, __pyx_t_1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_25); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
        __pyx_t_25 = PyNumber_Add(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_25);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_25);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
        __pyx_t_25 = 0;
        __pyx_t_4 = 0;
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_LPtsCross, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 639, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0640:                                   VPoly[1,ii] + L[jj]*v1 + DIn*VIn[1,ii]))
        __pyx_t_81 = 1;
        __pyx_t_82 = __pyx_v_ii;
        __pyx_t_83 = __pyx_v_jj;
        __pyx_t_1 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_81 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_82)) ))) + ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_L.data) + __pyx_t_83)) ))) * __pyx_v_v1))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
        __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_VIn, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0641:                 Lind.append(nn)
        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 641, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_Lind, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 641, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0642:                 nn += 1
        __pyx_v_nn = (__pyx_v_nn + 1);
+0643:                 VPolybis.append((VPoly[0,ii] + jj*dlr*v0,
        __pyx_t_84 = 0;
        __pyx_t_85 = __pyx_v_ii;
        __pyx_t_2 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_84 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_85)) ))) + ((__pyx_v_jj * __pyx_v_dlr) * __pyx_v_v0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 643, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
        __pyx_t_25 = PyTuple_New(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 643, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_25);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_4);
        __pyx_t_2 = 0;
        __pyx_t_4 = 0;
        __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_25); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 643, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      }
    }
+0644:                                  VPoly[1,ii] + jj*dlr*v1))
        __pyx_t_86 = 1;
        __pyx_t_87 = __pyx_v_ii;
        __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_86 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_87)) ))) + ((__pyx_v_jj * __pyx_v_dlr) * __pyx_v_v1))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 644, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
+0645:         VPolybis.append((VPoly[0,0],VPoly[1,0]))
    __pyx_t_88 = 0;
    __pyx_t_89 = 0;
    __pyx_t_25 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_88 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_89)) )))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_90 = 1;
    __pyx_t_91 = 0;
    __pyx_t_4 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_90 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_91)) )))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 645, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_25);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_25);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
    __pyx_t_25 = 0;
    __pyx_t_4 = 0;
    __pyx_t_35 = __Pyx_PyList_Append(__pyx_v_VPolybis, __pyx_t_2); if (unlikely(__pyx_t_35 == ((int)-1))) __PYX_ERR(0, 645, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __pyx_L3:;
 0646: 
+0647:     PtsCross, dLr, ind, Rref = np.array(LPtsCross).T, np.array(LdLr), \
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_25))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_25);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_25, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_25, __pyx_t_4, __pyx_v_LPtsCross) : __Pyx_PyObject_CallOneArg(__pyx_t_25, __pyx_v_LPtsCross);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_T); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_LdLr) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_LdLr);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 647, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 647, __pyx_L1_error)
+0648:       np.array(Lind,dtype=int), np.array(LRref)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_Lind);
  __Pyx_GIVEREF(__pyx_v_Lind);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_Lind);
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 648, __pyx_L1_error)
  __pyx_t_26 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_26) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_26, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_v_LRref) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_LRref);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 648, __pyx_L1_error)
  __pyx_t_92 = ((PyArrayObject *)__pyx_t_25);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_92, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
      }
      __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
    }
    __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 647, __pyx_L1_error)
  }
  __pyx_t_92 = 0;
  __pyx_v_PtsCross = ((PyArrayObject *)__pyx_t_25);
  __pyx_t_25 = 0;
  __pyx_t_93 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_93, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
    }
    __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 647, __pyx_L1_error)
  }
  __pyx_t_93 = 0;
  __pyx_v_dLr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_26);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
      }
      __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
    }
    __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 647, __pyx_L1_error)
  }
  __pyx_t_6 = 0;
  __pyx_v_ind = ((PyArrayObject *)__pyx_t_26);
  __pyx_t_26 = 0;
  __pyx_t_93 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_93, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_7 < 0)) {
      PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
      }
      __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
    }
    __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 647, __pyx_L1_error)
  }
  __pyx_t_93 = 0;
  __pyx_v_Rref = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0649:     if D1 is not None:
  __pyx_t_11 = (__pyx_v_D1 != Py_None);
  __pyx_t_94 = (__pyx_t_11 != 0);
  if (__pyx_t_94) {
/* … */
  }
+0650:         indin = (PtsCross[0,:]>=D1[0]) & (PtsCross[0,:]<=D1[1])
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__36); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_26 = __Pyx_GetItemInt(__pyx_v_D1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_26, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __pyx_t_26 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__36); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_D1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_25 = PyObject_RichCompare(__pyx_t_26, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_25); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_And(__pyx_t_2, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 650, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_v_indin = __pyx_t_3;
    __pyx_t_3 = 0;
+0651:         PtsCross = PtsCross[:,indin]
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_indin);
    __Pyx_GIVEREF(__pyx_v_indin);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_indin);
    __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 651, __pyx_L1_error)
    __pyx_t_92 = ((PyArrayObject *)__pyx_t_25);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_92, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
        }
        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 651, __pyx_L1_error)
    }
    __pyx_t_92 = 0;
    __Pyx_DECREF_SET(__pyx_v_PtsCross, ((PyArrayObject *)__pyx_t_25));
    __pyx_t_25 = 0;
+0652:         dLr, ind = dLr[indin], ind[indin]
    __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), __pyx_v_indin); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 652, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_indin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 652, __pyx_L1_error)
    __pyx_t_93 = ((PyArrayObject *)__pyx_t_25);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_93, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        }
        __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 652, __pyx_L1_error)
    }
    __pyx_t_93 = 0;
    __Pyx_DECREF_SET(__pyx_v_dLr, ((PyArrayObject *)__pyx_t_25));
    __pyx_t_25 = 0;
    __pyx_t_6 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
        }
        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 652, __pyx_L1_error)
    }
    __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
+0653:     if D2 is not None:
  __pyx_t_94 = (__pyx_v_D2 != Py_None);
  __pyx_t_11 = (__pyx_t_94 != 0);
  if (__pyx_t_11) {
/* … */
  }
+0654:         indin = (PtsCross[1,:]>=D2[0]) & (PtsCross[1,:]<=D2[1])
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_25 = __Pyx_GetItemInt(__pyx_v_D2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_25, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_D2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_26 = PyObject_RichCompare(__pyx_t_25, __pyx_t_3, Py_LE); __Pyx_XGOTREF(__pyx_t_26); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_And(__pyx_t_2, __pyx_t_26); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __Pyx_XDECREF_SET(__pyx_v_indin, __pyx_t_3);
    __pyx_t_3 = 0;
/* … */
  __pyx_tuple__42 = PyTuple_Pack(2, __pyx_int_1, __pyx_slice__8); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 654, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__42);
  __Pyx_GIVEREF(__pyx_tuple__42);
+0655:         PtsCross = PtsCross[:,indin]
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_indin);
    __Pyx_GIVEREF(__pyx_v_indin);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_indin);
    __pyx_t_26 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_3); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 655, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_26) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_26, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 655, __pyx_L1_error)
    __pyx_t_92 = ((PyArrayObject *)__pyx_t_26);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_92, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        }
        __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 655, __pyx_L1_error)
    }
    __pyx_t_92 = 0;
    __Pyx_DECREF_SET(__pyx_v_PtsCross, ((PyArrayObject *)__pyx_t_26));
    __pyx_t_26 = 0;
+0656:         dLr, ind = dLr[indin], ind[indin]
    __pyx_t_26 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), __pyx_v_indin); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    if (!(likely(((__pyx_t_26) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_26, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 656, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_indin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 656, __pyx_L1_error)
    __pyx_t_93 = ((PyArrayObject *)__pyx_t_26);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_93, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
        }
        __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 656, __pyx_L1_error)
    }
    __pyx_t_93 = 0;
    __Pyx_DECREF_SET(__pyx_v_dLr, ((PyArrayObject *)__pyx_t_26));
    __pyx_t_26 = 0;
    __pyx_t_6 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_7 < 0)) {
        PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        }
        __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 656, __pyx_L1_error)
    }
    __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
 0657: 
+0658:     return PtsCross, dLr, ind, N, Rref, np.array(VPolybis).T
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_26, __pyx_n_s_np); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_26, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
  __pyx_t_26 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_26)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_26);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_26) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_26, __pyx_v_VPolybis) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_VPolybis);
  __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_T); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 658, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_PtsCross));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_PtsCross));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_PtsCross));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_ind));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_v_ind));
  __Pyx_INCREF(((PyObject *)__pyx_v_N));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_N));
  PyTuple_SET_ITEM(__pyx_t_3, 3, ((PyObject *)__pyx_v_N));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_3, 4, ((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0659: 
 0660: 
 0661: ########################################################
 0662: ########################################################
 0663: #       Meshing - Volume - Tor
 0664: ########################################################
 0665: 
 0666: 
 0667: @cython.cdivision(True)
 0668: @cython.wraparound(False)
 0669: @cython.boundscheck(False)
+0670: def _Ves_Vmesh_Tor_SubFromD_cython(double dR, double dZ, double dRPhi,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_23_Ves_Vmesh_Tor_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_22_Ves_Vmesh_Tor_SubFromD_cython[] = "Return the desired submesh indicated by the limits (DR,DZ,DPhi),\n    for the desired resolution (dR,dZ,dRphi)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_23_Ves_Vmesh_Tor_SubFromD_cython = {"_Ves_Vmesh_Tor_SubFromD_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_23_Ves_Vmesh_Tor_SubFromD_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_22_Ves_Vmesh_Tor_SubFromD_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_23_Ves_Vmesh_Tor_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dR;
  double __pyx_v_dZ;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_RMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ZMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_DR = 0;
  PyObject *__pyx_v_DZ = 0;
  PyObject *__pyx_v_DPhi = 0;
  PyObject *__pyx_v_VPoly = 0;
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Tor_SubFromD_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dR,&__pyx_n_s_dZ,&__pyx_n_s_dRPhi,&__pyx_n_s_RMinMax,&__pyx_n_s_ZMinMax,&__pyx_n_s_DR,&__pyx_n_s_DZ,&__pyx_n_s_DPhi,&__pyx_n_s_VPoly,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_22_Ves_Vmesh_Tor_SubFromD_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dR, double __pyx_v_dZ, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_RMinMax, __Pyx_memviewslice __pyx_v_ZMinMax, PyObject *__pyx_v_DR, PyObject *__pyx_v_DZ, PyObject *__pyx_v_DPhi, PyObject *__pyx_v_VPoly, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_R0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_R = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dRPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED double __pyx_v_dRr0;
  double __pyx_v_dRr;
  double __pyx_v_dZr;
  double __pyx_v_DPhi0;
  double __pyx_v_DPhi1;
  double __pyx_v_abs0;
  double __pyx_v_abs1;
  double __pyx_v_phi;
  double __pyx_v_indiijj;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indR0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indR = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indZ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Phin = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_NR0;
  CYTHON_UNUSED int __pyx_v_NR;
  int __pyx_v_NZ;
  int __pyx_v_Rn;
  int __pyx_v_Zn;
  int __pyx_v_nRPhi0;
  int __pyx_v_indR0ii;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_nPhi0;
  int __pyx_v_nPhi1;
  int __pyx_v_zz;
  int __pyx_v_NP;
  int __pyx_v_NRPhi_int;
  int __pyx_v_Rratio;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_indI = 0;
  PyArrayObject *__pyx_v_iii = 0;
  PyArrayObject *__pyx_v_dV = 0;
  PyArrayObject *__pyx_v_ind = 0;
  CYTHON_UNUSED long __pyx_v_NPhimax;
  PyObject *__pyx_v_indin = NULL;
  PyObject *__pyx_v_Ru = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dV;
  __Pyx_Buffer __pyx_pybuffer_dV;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_iii;
  __Pyx_Buffer __pyx_pybuffer_iii;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indI;
  __Pyx_Buffer __pyx_pybuffer_indI;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Tor_SubFromD_cython", 0);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_indI.pybuffer.buf = NULL;
  __pyx_pybuffer_indI.refcount = 0;
  __pyx_pybuffernd_indI.data = NULL;
  __pyx_pybuffernd_indI.rcbuffer = &__pyx_pybuffer_indI;
  __pyx_pybuffer_iii.pybuffer.buf = NULL;
  __pyx_pybuffer_iii.refcount = 0;
  __pyx_pybuffernd_iii.data = NULL;
  __pyx_pybuffernd_iii.rcbuffer = &__pyx_pybuffer_iii;
  __pyx_pybuffer_dV.pybuffer.buf = NULL;
  __pyx_pybuffer_dV.refcount = 0;
  __pyx_pybuffernd_dV.data = NULL;
  __pyx_pybuffernd_dV.rcbuffer = &__pyx_pybuffer_dV;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __Pyx_XDECREF(__pyx_t_66);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Tor_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_R0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_R, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dRPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indR0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indR, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indZ, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Phin, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi0, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_indI);
  __Pyx_XDECREF((PyObject *)__pyx_v_iii);
  __Pyx_XDECREF((PyObject *)__pyx_v_dV);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_indin);
  __Pyx_XDECREF(__pyx_v_Ru);
  __PYX_XDEC_MEMVIEW(&__pyx_v_RMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ZMinMax, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__180 = PyTuple_Pack(54, __pyx_n_s_dR, __pyx_n_s_dZ, __pyx_n_s_dRPhi, __pyx_n_s_RMinMax, __pyx_n_s_ZMinMax, __pyx_n_s_DR, __pyx_n_s_DZ, __pyx_n_s_DPhi, __pyx_n_s_VPoly, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_R0, __pyx_n_s_R, __pyx_n_s_Z, __pyx_n_s_dRPhir, __pyx_n_s_dPhir, __pyx_n_s_NRPhi, __pyx_n_s_dRr0, __pyx_n_s_dRr, __pyx_n_s_dZr, __pyx_n_s_DPhi0, __pyx_n_s_DPhi1, __pyx_n_s_abs0, __pyx_n_s_abs1, __pyx_n_s_phi, __pyx_n_s_indiijj, __pyx_n_s_indR0, __pyx_n_s_indR, __pyx_n_s_indZ, __pyx_n_s_Phin, __pyx_n_s_NRPhi0, __pyx_n_s_NR0, __pyx_n_s_NR, __pyx_n_s_NZ, __pyx_n_s_Rn, __pyx_n_s_Zn, __pyx_n_s_nRPhi0, __pyx_n_s_indR0ii, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_nPhi0, __pyx_n_s_nPhi1, __pyx_n_s_zz, __pyx_n_s_NP, __pyx_n_s_NRPhi_int, __pyx_n_s_Rratio, __pyx_n_s_Pts, __pyx_n_s_indI, __pyx_n_s_iii, __pyx_n_s_dV, __pyx_n_s_ind, __pyx_n_s_NPhimax, __pyx_n_s_indin, __pyx_n_s_Ru); if (unlikely(!__pyx_tuple__180)) __PYX_ERR(0, 670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__180);
  __Pyx_GIVEREF(__pyx_tuple__180);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_23_Ves_Vmesh_Tor_SubFromD_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Vmesh_Tor_SubFromD_cython, __pyx_t_1) < 0) __PYX_ERR(0, 670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__181 = (PyObject*)__Pyx_PyCode_New(11, 0, 54, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__180, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Vmesh_Tor_SubFromD_cython, 670, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__181)) __PYX_ERR(0, 670, __pyx_L1_error)
 0671:                                    double[::1] RMinMax, double[::1] ZMinMax,
+0672:                                    DR=None, DZ=None, DPhi=None, VPoly=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dR)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dZ)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromD_cython", 0, 5, 11, 1); __PYX_ERR(0, 670, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromD_cython", 0, 5, 11, 2); __PYX_ERR(0, 670, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromD_cython", 0, 5, 11, 3); __PYX_ERR(0, 670, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ZMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromD_cython", 0, 5, 11, 4); __PYX_ERR(0, 670, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DR);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DZ);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DPhi);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Vmesh_Tor_SubFromD_cython") < 0)) __PYX_ERR(0, 670, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dR = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dR == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L3_error)
    __pyx_v_dZ = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dZ == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L3_error)
    __pyx_v_RMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_RMinMax.memview)) __PYX_ERR(0, 671, __pyx_L3_error)
    __pyx_v_ZMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ZMinMax.memview)) __PYX_ERR(0, 671, __pyx_L3_error)
    __pyx_v_DR = values[5];
    __pyx_v_DZ = values[6];
    __pyx_v_DPhi = values[7];
    __pyx_v_VPoly = values[8];
    __pyx_v_Out = ((PyObject*)values[9]);
    if (values[10]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 673, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__43;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromD_cython", 0, 5, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 670, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Tor_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 673, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_22_Ves_Vmesh_Tor_SubFromD_cython(__pyx_self, __pyx_v_dR, __pyx_v_dZ, __pyx_v_dRPhi, __pyx_v_RMinMax, __pyx_v_ZMinMax, __pyx_v_DR, __pyx_v_DZ, __pyx_v_DPhi, __pyx_v_VPoly, __pyx_v_Out, __pyx_v_margin);
+0673:                                    str Out='(X,Y,Z)', double margin=_VSMALL):
  __pyx_k__43 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0674:     """Return the desired submesh indicated by the limits (DR,DZ,DPhi),
 0675:     for the desired resolution (dR,dZ,dRphi)
 0676:     """
 0677:     cdef double[::1] R0, R, Z, dRPhir, dPhir, NRPhi
 0678:     #cdef double[::1] dPhi, NRZPhi_cum0, indPhi, phi
 0679:     cdef double dRr0, dRr, dZr, DPhi0, DPhi1
 0680:     cdef double abs0, abs1, phi, indiijj
 0681:     cdef long[::1] indR0, indR, indZ, Phin, NRPhi0
 0682:     cdef int NR0, NR, NZ, Rn, Zn, nRPhi0, indR0ii, ii, jj, nPhi0, nPhi1, zz
 0683:     cdef int NP, NRPhi_int, Rratio
 0684:     cdef np.ndarray[double,ndim=2] Pts, indI
 0685:     cdef np.ndarray[double,ndim=1] iii, dV, ind
 0686: 
 0687:     # Get the actual R and Z resolutions and mesh elements
+0688:     R0, dRr0, indR0, NR0 = _Ves_mesh_dlfromL_cython(RMinMax, dR, None,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_RMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dR); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 688, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 688, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 688, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 688, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_R0 = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dRr0 = __pyx_t_9;
  __pyx_v_indR0 = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_NR0 = __pyx_t_11;
+0689:                                                     Lim=True, margin=margin)
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 689, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_2) < 0) __PYX_ERR(0, 689, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0690:     R, dRr, indR, NR = _Ves_mesh_dlfromL_cython(RMinMax, dR, DR, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_RMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dR); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_DR);
  __Pyx_GIVEREF(__pyx_v_DR);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_DR);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 690, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 690, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 690, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 690, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 690, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 690, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_R = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dRr = __pyx_t_9;
  __pyx_v_indR = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_NR = __pyx_t_11;
+0691:                                                 margin=margin)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 690, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0692:     Z, dZr, indZ, NZ = _Ves_mesh_dlfromL_cython(ZMinMax, dZ, DZ, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_ZMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_DZ);
  __Pyx_GIVEREF(__pyx_v_DZ);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_DZ);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 692, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 692, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 692, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 692, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 692, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 692, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Z = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dZr = __pyx_t_9;
  __pyx_v_indZ = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_v_NZ = __pyx_t_11;
+0693:                                                 margin=margin)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 692, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0694:     Rn = len(R)
  __pyx_t_12 = __Pyx_MemoryView_Len(__pyx_v_R); 
  __pyx_v_Rn = __pyx_t_12;
+0695:     Zn = len(Z)
  __pyx_t_12 = __Pyx_MemoryView_Len(__pyx_v_Z); 
  __pyx_v_Zn = __pyx_t_12;
 0696: 
 0697:     # Get the limits if any (and make sure to replace them in the proper
 0698:     # quadrants)
+0699:     if DPhi is None:
  __pyx_t_13 = (__pyx_v_DPhi == Py_None);
  __pyx_t_14 = (__pyx_t_13 != 0);
  if (__pyx_t_14) {
/* … */
    goto __pyx_L9;
  }
+0700:         DPhi0, DPhi1 = -Cpi, Cpi
    __pyx_t_9 = (-M_PI);
    __pyx_t_15 = M_PI;
    __pyx_v_DPhi0 = __pyx_t_9;
    __pyx_v_DPhi1 = __pyx_t_15;
 0701:     else:
+0702:         DPhi0 = Catan2(Csin(DPhi[0]), Ccos(DPhi[0]))
  /*else*/ {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 702, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_DPhi0 = atan2(sin(__pyx_t_15), cos(__pyx_t_9));
+0703:         DPhi1 = Catan2(Csin(DPhi[1]), Ccos(DPhi[1]))
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_DPhi1 = atan2(sin(__pyx_t_9), cos(__pyx_t_15));
  }
  __pyx_L9:;
 0704: 
+0705:     dRPhir, dPhir = np.empty((Rn,)), np.empty((Rn,))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 705, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_dRPhir = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dPhir = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+0706:     Phin = np.empty((Rn,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 706, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_Phin = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+0707:     NRPhi = np.empty((Rn,))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 707, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_NRPhi = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+0708:     NRPhi0 = np.zeros((Rn,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 708, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 708, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_NRPhi0 = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+0709:     nRPhi0, indR0ii = 0, 0
  __pyx_t_11 = 0;
  __pyx_t_17 = 0;
  __pyx_v_nRPhi0 = __pyx_t_11;
  __pyx_v_indR0ii = __pyx_t_17;
+0710:     NP, NPhimax = 0, 0
  __pyx_t_17 = 0;
  __pyx_t_18 = 0;
  __pyx_v_NP = __pyx_t_17;
  __pyx_v_NPhimax = __pyx_t_18;
+0711:     Rratio = int(Cceil(R[Rn-1]/R[0]))
  __pyx_t_19 = (__pyx_v_Rn - 1);
  __pyx_t_20 = 0;
  __pyx_v_Rratio = ((int)ceil(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_19)) ))) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_20)) ))))));
 0712: 
+0713:     for ii in range(0,Rn):
  __pyx_t_17 = __pyx_v_Rn;
  __pyx_t_11 = __pyx_t_17;
  for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_11; __pyx_t_21+=1) {
    __pyx_v_ii = __pyx_t_21;
 0714:         # Get the actual RPhi resolution and Phi mesh elements (! depends on R!)
+0715:         NRPhi[ii] = Cceil(2.*Cpi*R[ii]/dRPhi)
    __pyx_t_22 = __pyx_v_ii;
    __pyx_t_23 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_23)) )) = ceil((((2. * M_PI) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_22)) )))) / __pyx_v_dRPhi));
+0716:         NRPhi_int = int(NRPhi[ii])
    __pyx_t_24 = __pyx_v_ii;
    __pyx_v_NRPhi_int = ((int)(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_24)) ))));
+0717:         dPhir[ii] = 2.*Cpi/NRPhi[ii]
    __pyx_t_25 = __pyx_v_ii;
    __pyx_t_26 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_26)) )) = ((2. * M_PI) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_25)) ))));
+0718:         dRPhir[ii] = dPhir[ii]*R[ii]
    __pyx_t_27 = __pyx_v_ii;
    __pyx_t_28 = __pyx_v_ii;
    __pyx_t_29 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_29)) )) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_27)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_28)) ))));
 0719:         # Get index and cumulated indices from background
+0720:         for jj in range(indR0ii,NR0):
    __pyx_t_30 = __pyx_v_NR0;
    __pyx_t_31 = __pyx_t_30;
    for (__pyx_t_32 = __pyx_v_indR0ii; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
      __pyx_v_jj = __pyx_t_32;
+0721:             if R0[jj]==R[ii]:
      __pyx_t_33 = __pyx_v_jj;
      __pyx_t_34 = __pyx_v_ii;
      __pyx_t_14 = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R0.data) + __pyx_t_33)) ))) == (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_34)) )))) != 0);
      if (__pyx_t_14) {
/* … */
      }
+0722:                 indR0ii = jj
        __pyx_v_indR0ii = __pyx_v_jj;
+0723:                 break
        goto __pyx_L13_break;
 0724:             else:
+0725:                 nRPhi0 += <long>Cceil(2.*Cpi*R0[jj]/dRPhi)
      /*else*/ {
        __pyx_t_35 = __pyx_v_jj;
        __pyx_v_nRPhi0 = (__pyx_v_nRPhi0 + ((long)ceil((((2. * M_PI) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R0.data) + __pyx_t_35)) )))) / __pyx_v_dRPhi))));
+0726:                 NRPhi0[ii] = nRPhi0*NZ
        __pyx_t_36 = __pyx_v_ii;
        *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_36)) )) = (__pyx_v_nRPhi0 * __pyx_v_NZ);
      }
    }
    __pyx_L13_break:;
 0727:         # Get indices of phi
 0728:         # Get the extreme indices of the mesh elements that really need to
 0729:         # be created within those limits
+0730:         abs0 = Cabs(DPhi0+Cpi)
    __pyx_v_abs0 = fabs((__pyx_v_DPhi0 + M_PI));
+0731:         if abs0-dPhir[ii]*Cfloor(abs0/dPhir[ii]) < margin*dPhir[ii]:
    __pyx_t_37 = __pyx_v_ii;
    __pyx_t_38 = __pyx_v_ii;
    __pyx_t_39 = __pyx_v_ii;
    __pyx_t_14 = (((__pyx_v_abs0 - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_37)) ))) * floor((__pyx_v_abs0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_38)) ))))))) < (__pyx_v_margin * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_39)) ))))) != 0);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L15;
    }
+0732:             nPhi0 = int(Cround((DPhi0+Cpi)/dPhir[ii]))
      __pyx_t_40 = __pyx_v_ii;
      __pyx_v_nPhi0 = ((int)round(((__pyx_v_DPhi0 + M_PI) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_40)) ))))));
 0733:         else:
+0734:             nPhi0 = int(Cfloor((DPhi0+Cpi)/dPhir[ii]))
    /*else*/ {
      __pyx_t_41 = __pyx_v_ii;
      __pyx_v_nPhi0 = ((int)floor(((__pyx_v_DPhi0 + M_PI) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_41)) ))))));
    }
    __pyx_L15:;
+0735:         abs1 = Cabs(DPhi1+Cpi)
    __pyx_v_abs1 = fabs((__pyx_v_DPhi1 + M_PI));
+0736:         if abs1-dPhir[ii]*Cfloor(abs1/dPhir[ii]) < margin*dPhir[ii]:
    __pyx_t_42 = __pyx_v_ii;
    __pyx_t_43 = __pyx_v_ii;
    __pyx_t_44 = __pyx_v_ii;
    __pyx_t_14 = (((__pyx_v_abs1 - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_42)) ))) * floor((__pyx_v_abs1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_43)) ))))))) < (__pyx_v_margin * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_44)) ))))) != 0);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L16;
    }
+0737:             nPhi1 = int(Cround((DPhi1+Cpi)/dPhir[ii])-1)
      __pyx_t_45 = __pyx_v_ii;
      __pyx_v_nPhi1 = ((int)(round(((__pyx_v_DPhi1 + M_PI) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_45)) ))))) - 1.0));
 0738:         else:
+0739:             nPhi1 = int(Cfloor((DPhi1+Cpi)/dPhir[ii]))
    /*else*/ {
      __pyx_t_46 = __pyx_v_ii;
      __pyx_v_nPhi1 = ((int)floor(((__pyx_v_DPhi1 + M_PI) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_46)) ))))));
    }
    __pyx_L16:;
 0740: 
+0741:         if DPhi0<DPhi1:
    __pyx_t_14 = ((__pyx_v_DPhi0 < __pyx_v_DPhi1) != 0);
    if (__pyx_t_14) {
/* … */
      goto __pyx_L17;
    }
 0742:             #indI.append(list(range(nPhi0,nPhi1+1)))
+0743:             Phin[ii] = nPhi1+1-nPhi0
      __pyx_t_47 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_47)) )) = ((__pyx_v_nPhi1 + 1) - __pyx_v_nPhi0);
+0744:             if ii==0:
      __pyx_t_14 = ((__pyx_v_ii == 0) != 0);
      if (__pyx_t_14) {
/* … */
      }
+0745:                 indI = np.nan*np.ones((Rn,Phin[ii]*Rratio+1))
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_48 = __pyx_v_ii;
        __pyx_t_2 = __Pyx_PyInt_From_long((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_48)) ))) * __pyx_v_Rratio) + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
        __pyx_t_5 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 745, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 745, __pyx_L1_error)
        __pyx_t_49 = ((PyArrayObject *)__pyx_t_3);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
          __pyx_t_30 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_t_49, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_30 < 0)) {
            PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_v_indI, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
            }
            __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
          }
          __pyx_pybuffernd_indI.diminfo[0].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indI.diminfo[0].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indI.diminfo[1].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indI.diminfo[1].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 745, __pyx_L1_error)
        }
        __pyx_t_49 = 0;
        __Pyx_XDECREF_SET(__pyx_v_indI, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;
+0746:             for jj in range(0,Phin[ii]):
      __pyx_t_53 = __pyx_v_ii;
      __pyx_t_18 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_53)) )));
      __pyx_t_54 = __pyx_t_18;
      for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_54; __pyx_t_30+=1) {
        __pyx_v_jj = __pyx_t_30;
+0747:                 indI[ii,jj] = <double>( nPhi0+jj )
        __pyx_t_55 = __pyx_v_ii;
        __pyx_t_56 = __pyx_v_jj;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_indI.rcbuffer->pybuffer.buf, __pyx_t_55, __pyx_pybuffernd_indI.diminfo[0].strides, __pyx_t_56, __pyx_pybuffernd_indI.diminfo[1].strides) = ((double)(__pyx_v_nPhi0 + __pyx_v_jj));
      }
 0748:         else:
 0749:             #indI.append(list(range(nPhi0,NRPhi_int)+list(range(0,nPhi1+1))))
+0750:             Phin[ii] = nPhi1+1+NRPhi_int-nPhi0
    /*else*/ {
      __pyx_t_57 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_57)) )) = (((__pyx_v_nPhi1 + 1) + __pyx_v_NRPhi_int) - __pyx_v_nPhi0);
+0751:             if ii==0:
      __pyx_t_14 = ((__pyx_v_ii == 0) != 0);
      if (__pyx_t_14) {
/* … */
      }
+0752:                 indI = np.nan*np.ones((Rn,Phin[ii]*Rratio+1))
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Rn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_58 = __pyx_v_ii;
        __pyx_t_2 = __Pyx_PyInt_From_long((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_58)) ))) * __pyx_v_Rratio) + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
        __pyx_t_4 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_2)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 752, __pyx_L1_error)
        __pyx_t_49 = ((PyArrayObject *)__pyx_t_6);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
          __pyx_t_30 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_t_49, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_30 < 0)) {
            PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_v_indI, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
            }
            __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
          }
          __pyx_pybuffernd_indI.diminfo[0].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indI.diminfo[0].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indI.diminfo[1].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indI.diminfo[1].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 752, __pyx_L1_error)
        }
        __pyx_t_49 = 0;
        __Pyx_XDECREF_SET(__pyx_v_indI, ((PyArrayObject *)__pyx_t_6));
        __pyx_t_6 = 0;
+0753:             for jj in range(0,NRPhi_int-nPhi0):
      __pyx_t_30 = (__pyx_v_NRPhi_int - __pyx_v_nPhi0);
      __pyx_t_31 = __pyx_t_30;
      for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
        __pyx_v_jj = __pyx_t_32;
+0754:                 indI[ii,jj] = <double>( nPhi0+jj )
        __pyx_t_59 = __pyx_v_ii;
        __pyx_t_60 = __pyx_v_jj;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_indI.rcbuffer->pybuffer.buf, __pyx_t_59, __pyx_pybuffernd_indI.diminfo[0].strides, __pyx_t_60, __pyx_pybuffernd_indI.diminfo[1].strides) = ((double)(__pyx_v_nPhi0 + __pyx_v_jj));
      }
+0755:             for jj in range(NRPhi_int-nPhi0,Phin[ii]):
      __pyx_t_61 = __pyx_v_ii;
      __pyx_t_18 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_61)) )));
      __pyx_t_54 = __pyx_t_18;
      for (__pyx_t_30 = (__pyx_v_NRPhi_int - __pyx_v_nPhi0); __pyx_t_30 < __pyx_t_54; __pyx_t_30+=1) {
        __pyx_v_jj = __pyx_t_30;
+0756:                 indI[ii,jj] = <double>( jj- (NRPhi_int-nPhi0) )
        __pyx_t_62 = __pyx_v_ii;
        __pyx_t_63 = __pyx_v_jj;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_indI.rcbuffer->pybuffer.buf, __pyx_t_62, __pyx_pybuffernd_indI.diminfo[0].strides, __pyx_t_63, __pyx_pybuffernd_indI.diminfo[1].strides) = ((double)(__pyx_v_jj - (__pyx_v_NRPhi_int - __pyx_v_nPhi0)));
      }
    }
    __pyx_L17:;
+0757:         NP += Zn*Phin[ii]
    __pyx_t_64 = __pyx_v_ii;
    __pyx_v_NP = (__pyx_v_NP + (__pyx_v_Zn * (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_64)) )))));
  }
 0758: 
+0759:     Pts = np.empty((3,NP))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 759, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 759, __pyx_L1_error)
  __pyx_t_49 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_49, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
      }
      __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
    }
    __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 759, __pyx_L1_error)
  }
  __pyx_t_49 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
+0760:     ind = np.empty((NP,))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 760, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 760, __pyx_L1_error)
  __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
      }
      __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
    }
    __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 760, __pyx_L1_error)
  }
  __pyx_t_65 = 0;
  __pyx_v_ind = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
+0761:     dV = np.empty((NP,))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 761, __pyx_L1_error)
  __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_v_dV, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
      }
      __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
    }
    __pyx_pybuffernd_dV.diminfo[0].strides = __pyx_pybuffernd_dV.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dV.diminfo[0].shape = __pyx_pybuffernd_dV.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 761, __pyx_L1_error)
  }
  __pyx_t_65 = 0;
  __pyx_v_dV = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 0762:     # Compute Pts, dV and ind
 0763:     # This triple loop is the longest part, it takes ~90% of the CPU time
+0764:     NP = 0
  __pyx_v_NP = 0;
+0765:     if Out.lower()=='(x,y,z)':
  __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_14 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 765, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_14) {
/* … */
    goto __pyx_L26;
  }
+0766:         for ii in range(0,Rn):
    __pyx_t_17 = __pyx_v_Rn;
    __pyx_t_11 = __pyx_t_17;
    for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_11; __pyx_t_21+=1) {
      __pyx_v_ii = __pyx_t_21;
 0767:             # To make sure the indices are in increasing order
+0768:             iii = np.sort(indI[ii,~np.isnan(indI[ii,:])])
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sort); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_66 = PyTuple_New(2); if (unlikely(!__pyx_t_66)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_66);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_66, 0, __pyx_t_2);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_66, 1, __pyx_slice__8);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_66); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_66); __pyx_t_66 = 0;
      __pyx_t_66 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_66 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_66)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_66);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_5 = (__pyx_t_66) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_66, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_66); __pyx_t_66 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Invert(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 768, __pyx_L1_error)
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
        __pyx_t_30 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_30 < 0)) {
          PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_v_iii, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
          }
          __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
        }
        __pyx_pybuffernd_iii.diminfo[0].strides = __pyx_pybuffernd_iii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iii.diminfo[0].shape = __pyx_pybuffernd_iii.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 768, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_XDECREF_SET(__pyx_v_iii, ((PyArrayObject *)__pyx_t_6));
      __pyx_t_6 = 0;
+0769:             for zz in range(0,Zn):
      __pyx_t_30 = __pyx_v_Zn;
      __pyx_t_31 = __pyx_t_30;
      for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
        __pyx_v_zz = __pyx_t_32;
+0770:                 for jj in range(0,Phin[ii]):
        __pyx_t_67 = __pyx_v_ii;
        __pyx_t_18 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_67)) )));
        __pyx_t_54 = __pyx_t_18;
        for (__pyx_t_68 = 0; __pyx_t_68 < __pyx_t_54; __pyx_t_68+=1) {
          __pyx_v_jj = __pyx_t_68;
+0771:                     indiijj = iii[jj]
          __pyx_t_69 = __pyx_v_jj;
          __pyx_v_indiijj = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_iii.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_iii.diminfo[0].strides));
+0772:                     phi = -Cpi + (0.5+indiijj)*dPhir[ii]
          __pyx_t_70 = __pyx_v_ii;
          __pyx_v_phi = ((-M_PI) + ((0.5 + __pyx_v_indiijj) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_70)) )))));
+0773:                     Pts[0,NP] = R[ii]*Ccos(phi)
          __pyx_t_71 = __pyx_v_ii;
          __pyx_t_72 = 0;
          __pyx_t_73 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_73, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_71)) ))) * cos(__pyx_v_phi));
+0774:                     Pts[1,NP] = R[ii]*Csin(phi)
          __pyx_t_74 = __pyx_v_ii;
          __pyx_t_75 = 1;
          __pyx_t_76 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_75, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_76, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_74)) ))) * sin(__pyx_v_phi));
+0775:                     Pts[2,NP] = Z[zz]
          __pyx_t_77 = __pyx_v_zz;
          __pyx_t_78 = 2;
          __pyx_t_79 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_78, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_79, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Z.data) + __pyx_t_77)) )));
+0776:                     ind[NP] = NRPhi0[ii] + indZ[zz]*NRPhi[ii] + indiijj
          __pyx_t_80 = __pyx_v_ii;
          __pyx_t_81 = __pyx_v_zz;
          __pyx_t_82 = __pyx_v_ii;
          __pyx_t_83 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ind.rcbuffer->pybuffer.buf, __pyx_t_83, __pyx_pybuffernd_ind.diminfo[0].strides) = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_80)) ))) + ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_indZ.data) + __pyx_t_81)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_82)) ))))) + __pyx_v_indiijj);
+0777:                     dV[NP] = dRr*dZr*dRPhir[ii]
          __pyx_t_84 = __pyx_v_ii;
          __pyx_t_85 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dV.rcbuffer->pybuffer.buf, __pyx_t_85, __pyx_pybuffernd_dV.diminfo[0].strides) = ((__pyx_v_dRr * __pyx_v_dZr) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_84)) ))));
+0778:                     NP += 1
          __pyx_v_NP = (__pyx_v_NP + 1);
        }
      }
    }
 0779:     else:
+0780:         for ii in range(0,Rn):
  /*else*/ {
    __pyx_t_17 = __pyx_v_Rn;
    __pyx_t_11 = __pyx_t_17;
    for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_11; __pyx_t_21+=1) {
      __pyx_v_ii = __pyx_t_21;
+0781:             iii = np.sort(indI[ii,~np.isnan(indI[ii,:])])
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_sort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isnan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_66 = PyTuple_New(2); if (unlikely(!__pyx_t_66)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_66);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_66, 0, __pyx_t_3);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_66, 1, __pyx_slice__8);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_66); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_66); __pyx_t_66 = 0;
      __pyx_t_66 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_66 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_66)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_66);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_5 = (__pyx_t_66) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_66, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_66); __pyx_t_66 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_Invert(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
      __pyx_t_1 = 0;
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 781, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 781, __pyx_L1_error)
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
        __pyx_t_30 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_30 < 0)) {
          PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_v_iii, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
          }
          __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
        }
        __pyx_pybuffernd_iii.diminfo[0].strides = __pyx_pybuffernd_iii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iii.diminfo[0].shape = __pyx_pybuffernd_iii.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 781, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_XDECREF_SET(__pyx_v_iii, ((PyArrayObject *)__pyx_t_6));
      __pyx_t_6 = 0;
 0782:             #assert iii.size==Phin[ii] and np.all(np.unique(iii)==iii)
+0783:             for zz in range(0,Zn):
      __pyx_t_30 = __pyx_v_Zn;
      __pyx_t_31 = __pyx_t_30;
      for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
        __pyx_v_zz = __pyx_t_32;
+0784:                 for jj in range(0,Phin[ii]):
        __pyx_t_86 = __pyx_v_ii;
        __pyx_t_18 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_86)) )));
        __pyx_t_54 = __pyx_t_18;
        for (__pyx_t_68 = 0; __pyx_t_68 < __pyx_t_54; __pyx_t_68+=1) {
          __pyx_v_jj = __pyx_t_68;
+0785:                     indiijj = iii[jj] #indI[ii,iii[jj]]
          __pyx_t_87 = __pyx_v_jj;
          __pyx_v_indiijj = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_iii.rcbuffer->pybuffer.buf, __pyx_t_87, __pyx_pybuffernd_iii.diminfo[0].strides));
+0786:                     Pts[0,NP] = R[ii]
          __pyx_t_88 = __pyx_v_ii;
          __pyx_t_89 = 0;
          __pyx_t_90 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_89, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_90, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_88)) )));
+0787:                     Pts[1,NP] = Z[zz]
          __pyx_t_91 = __pyx_v_zz;
          __pyx_t_92 = 1;
          __pyx_t_93 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_92, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_93, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Z.data) + __pyx_t_91)) )));
+0788:                     Pts[2,NP] = -Cpi + (0.5+indiijj)*dPhir[ii]
          __pyx_t_94 = __pyx_v_ii;
          __pyx_t_95 = 2;
          __pyx_t_96 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_95, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_96, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((-M_PI) + ((0.5 + __pyx_v_indiijj) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_94)) )))));
+0789:                     ind[NP] = NRPhi0[ii] + indZ[zz]*NRPhi[ii] + indiijj
          __pyx_t_97 = __pyx_v_ii;
          __pyx_t_98 = __pyx_v_zz;
          __pyx_t_99 = __pyx_v_ii;
          __pyx_t_100 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ind.rcbuffer->pybuffer.buf, __pyx_t_100, __pyx_pybuffernd_ind.diminfo[0].strides) = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_97)) ))) + ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_indZ.data) + __pyx_t_98)) ))) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_99)) ))))) + __pyx_v_indiijj);
+0790:                     dV[NP] = dRr*dZr*dRPhir[ii]
          __pyx_t_101 = __pyx_v_ii;
          __pyx_t_102 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dV.rcbuffer->pybuffer.buf, __pyx_t_102, __pyx_pybuffernd_dV.diminfo[0].strides) = ((__pyx_v_dRr * __pyx_v_dZr) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_101)) ))));
+0791:                     NP += 1
          __pyx_v_NP = (__pyx_v_NP + 1);
        }
      }
    }
  }
  __pyx_L26:;
 0792: 
+0793:     if VPoly is not None:
  __pyx_t_14 = (__pyx_v_VPoly != Py_None);
  __pyx_t_13 = (__pyx_t_14 != 0);
  if (__pyx_t_13) {
/* … */
  }
+0794:         if Out.lower()=='(x,y,z)':
    __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_13 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 794, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (__pyx_t_13) {
/* … */
      goto __pyx_L40;
    }
+0795:             R = np.hypot(Pts[0,:],Pts[1,:])
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_hypot); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__36); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__42); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = NULL;
      __pyx_t_17 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
          __pyx_t_17 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_4, __pyx_t_5};
        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_4, __pyx_t_5};
        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else
      #endif
      {
        __pyx_t_3 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_17, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_17, __pyx_t_5);
        __pyx_t_4 = 0;
        __pyx_t_5 = 0;
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_R, 1);
      __pyx_v_R = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
+0796:             indin = Path(VPoly.T).contains_points(np.array([R,Pts[2,:]]).T,
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_R, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_indin = __pyx_t_1;
      __pyx_t_1 = 0;
+0797:                                                   transform=None, radius=0.0)
      __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 797, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 797, __pyx_L1_error)
+0798:             Pts, dV, ind = Pts[:,indin], dV[indin], ind[indin]
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_slice__8);
      __Pyx_INCREF(__pyx_v_indin);
      __Pyx_GIVEREF(__pyx_v_indin);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_indin);
      __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 798, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dV), __pyx_v_indin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 798, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_indin); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 798, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 798, __pyx_L1_error)
      __pyx_t_49 = ((PyArrayObject *)__pyx_t_5);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_49, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
          }
          __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 798, __pyx_L1_error)
      }
      __pyx_t_49 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_1);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_v_dV, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
          }
          __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
        }
        __pyx_pybuffernd_dV.diminfo[0].strides = __pyx_pybuffernd_dV.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dV.diminfo[0].shape = __pyx_pybuffernd_dV.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 798, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_DECREF_SET(__pyx_v_dV, ((PyArrayObject *)__pyx_t_1));
      __pyx_t_1 = 0;
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
          }
          __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 798, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_6));
      __pyx_t_6 = 0;
+0799:             Ru = np.unique(R)
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_unique); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_R, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 799, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_Ru = __pyx_t_6;
      __pyx_t_6 = 0;
 0800:         else:
+0801:             indin = Path(VPoly.T).contains_points(Pts[:-1,:].T, transform=None,
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Path); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__44); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_T); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 801, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_indin = __pyx_t_2;
      __pyx_t_2 = 0;
/* … */
  __pyx_tuple__44 = PyTuple_Pack(2, __pyx_slice__23, __pyx_slice__8); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__44);
  __Pyx_GIVEREF(__pyx_tuple__44);
 0802:                                                   radius=0.0)
+0803:             Pts, dV, ind = Pts[:,indin], dV[indin], ind[indin]
      __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
      __Pyx_INCREF(__pyx_v_indin);
      __Pyx_GIVEREF(__pyx_v_indin);
      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indin);
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 803, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dV), __pyx_v_indin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 803, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_indin); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 803, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 803, __pyx_L1_error)
      __pyx_t_49 = ((PyArrayObject *)__pyx_t_1);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_49, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
          }
          __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 803, __pyx_L1_error)
      }
      __pyx_t_49 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_1));
      __pyx_t_1 = 0;
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_2);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_52, &__pyx_t_51, &__pyx_t_50);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_v_dV, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_52); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_50);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_52, __pyx_t_51, __pyx_t_50);
          }
          __pyx_t_52 = __pyx_t_51 = __pyx_t_50 = 0;
        }
        __pyx_pybuffernd_dV.diminfo[0].strides = __pyx_pybuffernd_dV.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dV.diminfo[0].shape = __pyx_pybuffernd_dV.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 803, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_DECREF_SET(__pyx_v_dV, ((PyArrayObject *)__pyx_t_2));
      __pyx_t_2 = 0;
      __pyx_t_65 = ((PyArrayObject *)__pyx_t_6);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_65, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_50, &__pyx_t_51, &__pyx_t_52);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_50); Py_XDECREF(__pyx_t_51); Py_XDECREF(__pyx_t_52);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_50, __pyx_t_51, __pyx_t_52);
          }
          __pyx_t_50 = __pyx_t_51 = __pyx_t_52 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 803, __pyx_L1_error)
      }
      __pyx_t_65 = 0;
      __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_6));
      __pyx_t_6 = 0;
+0804:             Ru = np.unique(Pts[0,:])
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_unique); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__36); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 804, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_Ru = __pyx_t_6;
      __pyx_t_6 = 0;
    }
    __pyx_L40:;
+0805:         if not np.all(Ru==R):
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_all); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_R, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyObject_RichCompare(__pyx_v_Ru, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 805, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_14 = ((!__pyx_t_13) != 0);
    if (__pyx_t_14) {
/* … */
    }
+0806:             dRPhir = np.array([dRPhir[ii] for ii in range(0,len(R)) \
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_12 = __Pyx_MemoryView_Len(__pyx_v_R); 
      __pyx_t_103 = __pyx_t_12;
      for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_103; __pyx_t_17+=1) {
        __pyx_v_ii = __pyx_t_17;
/* … */
          __pyx_t_105 = __pyx_v_ii;
          __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_105)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 806, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 806, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_dRPhir, 1);
      __pyx_v_dRPhir = __pyx_t_16;
      __pyx_t_16.memview = NULL;
      __pyx_t_16.data = NULL;
+0807:                                if R[ii] in Ru])
        __pyx_t_104 = __pyx_v_ii;
        __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_104)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 807, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_14 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_v_Ru, Py_EQ)); if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 807, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_13 = (__pyx_t_14 != 0);
        if (__pyx_t_13) {
/* … */
        }
      }
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
        }
      }
      __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 806, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0808:     return Pts, dV, ind.astype(int), dRr, dZr, np.asarray(dRPhir)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ind), __pyx_n_s_astype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dRr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_dRPhir, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_66 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_66 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_66)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_66);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_66) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_66, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_66); __pyx_t_66 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyTuple_New(6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dV));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dV));
  PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_dV));
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_t_1);
  __pyx_t_6 = 0;
  __pyx_t_5 = 0;
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 0809: 
 0810: 
 0811: 
 0812: 
 0813: @cython.cdivision(True)
 0814: @cython.wraparound(False)
 0815: @cython.boundscheck(False)
+0816: def _Ves_Vmesh_Tor_SubFromInd_cython(double dR, double dZ, double dRPhi,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_25_Ves_Vmesh_Tor_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_24_Ves_Vmesh_Tor_SubFromInd_cython[] = " Return the desired submesh indicated by the (numerical) indices,\n    for the desired resolution (dR,dZ,dRphi)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_25_Ves_Vmesh_Tor_SubFromInd_cython = {"_Ves_Vmesh_Tor_SubFromInd_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_25_Ves_Vmesh_Tor_SubFromInd_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_24_Ves_Vmesh_Tor_SubFromInd_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_25_Ves_Vmesh_Tor_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dR;
  double __pyx_v_dZ;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_RMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ZMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ind = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Tor_SubFromInd_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dR,&__pyx_n_s_dZ,&__pyx_n_s_dRPhi,&__pyx_n_s_RMinMax,&__pyx_n_s_ZMinMax,&__pyx_n_s_ind,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    values[6] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dR)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dZ)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, 1); __PYX_ERR(0, 816, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, 2); __PYX_ERR(0, 816, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, 3); __PYX_ERR(0, 816, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ZMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, 4); __PYX_ERR(0, 816, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, 5); __PYX_ERR(0, 816, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Vmesh_Tor_SubFromInd_cython") < 0)) __PYX_ERR(0, 816, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dR = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dR == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 816, __pyx_L3_error)
    __pyx_v_dZ = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dZ == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 816, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 816, __pyx_L3_error)
    __pyx_v_RMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_RMinMax.memview)) __PYX_ERR(0, 817, __pyx_L3_error)
    __pyx_v_ZMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ZMinMax.memview)) __PYX_ERR(0, 817, __pyx_L3_error)
    __pyx_v_ind = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ind.memview)) __PYX_ERR(0, 818, __pyx_L3_error)
    __pyx_v_Out = ((PyObject*)values[6]);
    if (values[7]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 819, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__45;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Tor_SubFromInd_cython", 0, 6, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 816, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Tor_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 818, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_24_Ves_Vmesh_Tor_SubFromInd_cython(__pyx_self, __pyx_v_dR, __pyx_v_dZ, __pyx_v_dRPhi, __pyx_v_RMinMax, __pyx_v_ZMinMax, __pyx_v_ind, __pyx_v_Out, __pyx_v_margin);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_24_Ves_Vmesh_Tor_SubFromInd_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dR, double __pyx_v_dZ, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_RMinMax, __Pyx_memviewslice __pyx_v_ZMinMax, __Pyx_memviewslice __pyx_v_ind, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_R = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dRPhirRef = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Ru = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dRPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dRr;
  double __pyx_v_dZr;
  double __pyx_v_phi;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indR = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indZ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi = { 0, 0, { 0 }, { 0 }, { 0 } };
  long __pyx_v_NR;
  long __pyx_v_NZ;
  CYTHON_UNUSED long __pyx_v_Rn;
  CYTHON_UNUSED long __pyx_v_Zn;
  long __pyx_v_NP;
  long __pyx_v_Rratio;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_iiR;
  int __pyx_v_iiZ;
  int __pyx_v_iiphi;
  __Pyx_memviewslice __pyx_v_Phi = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_dV = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dV;
  __Pyx_Buffer __pyx_pybuffer_dV;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Tor_SubFromInd_cython", 0);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_dV.pybuffer.buf = NULL;
  __pyx_pybuffer_dV.refcount = 0;
  __pyx_pybuffernd_dV.data = NULL;
  __pyx_pybuffernd_dV.rcbuffer = &__pyx_pybuffer_dV;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_32, 1);
  __Pyx_XDECREF(__pyx_t_92);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Tor_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dV.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_R, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dRPhirRef, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ru, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dRPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indR, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indZ, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Phi, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_dV);
  __PYX_XDEC_MEMVIEW(&__pyx_v_RMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ZMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ind, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__182 = PyTuple_Pack(35, __pyx_n_s_dR, __pyx_n_s_dZ, __pyx_n_s_dRPhi, __pyx_n_s_RMinMax, __pyx_n_s_ZMinMax, __pyx_n_s_ind, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_R, __pyx_n_s_Z, __pyx_n_s_dRPhirRef, __pyx_n_s_dPhir, __pyx_n_s_Ru, __pyx_n_s_dRPhir, __pyx_n_s_dRr, __pyx_n_s_dZr, __pyx_n_s_phi, __pyx_n_s_indR, __pyx_n_s_indZ, __pyx_n_s_NRPhi0, __pyx_n_s_NRPhi, __pyx_n_s_NR, __pyx_n_s_NZ, __pyx_n_s_Rn, __pyx_n_s_Zn, __pyx_n_s_NP, __pyx_n_s_Rratio, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_iiR, __pyx_n_s_iiZ, __pyx_n_s_iiphi, __pyx_n_s_Phi, __pyx_n_s_Pts, __pyx_n_s_dV); if (unlikely(!__pyx_tuple__182)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__182);
  __Pyx_GIVEREF(__pyx_tuple__182);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_25_Ves_Vmesh_Tor_SubFromInd_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Vmesh_Tor_SubFromInd_cython, __pyx_t_1) < 0) __PYX_ERR(0, 816, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__183 = (PyObject*)__Pyx_PyCode_New(8, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__182, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Vmesh_Tor_SubFromInd_cython, 816, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__183)) __PYX_ERR(0, 816, __pyx_L1_error)
 0817:                                      double[::1] RMinMax, double[::1] ZMinMax,
 0818:                                      long[::1] ind, str Out='(X,Y,Z)',
+0819:                                      double margin=_VSMALL):
  __pyx_k__45 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0820:     """ Return the desired submesh indicated by the (numerical) indices,
 0821:     for the desired resolution (dR,dZ,dRphi)
 0822:     """
 0823:     cdef double[::1] R, Z, dRPhirRef, dPhir, Ru, dRPhir
 0824:     cdef double dRr, dZr, phi
 0825:     cdef long[::1] indR, indZ, NRPhi0, NRPhi
+0826:     cdef long NR, NZ, Rn, Zn, NP=len(ind), Rratio
  __pyx_t_1 = __Pyx_MemoryView_Len(__pyx_v_ind); 
  __pyx_v_NP = __pyx_t_1;
+0827:     cdef int ii=0, jj=0, iiR, iiZ, iiphi
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 0828:     cdef double[:,::1] Phi
+0829:     cdef np.ndarray[double,ndim=2] Pts=np.empty((3,NP))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_NP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 829, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_Pts = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 829, __pyx_L1_error)
    } else {__pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+0830:     cdef np.ndarray[double,ndim=1] dV=np.empty((NP,))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_NP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 830, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dV.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_dV = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_dV.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 830, __pyx_L1_error)
    } else {__pyx_pybuffernd_dV.diminfo[0].strides = __pyx_pybuffernd_dV.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dV.diminfo[0].shape = __pyx_pybuffernd_dV.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_dV = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 0831: 
 0832:     # Get the actual R and Z resolutions and mesh elements
+0833:     R, dRr, indR, NR = _Ves_mesh_dlfromL_cython(RMinMax, dR, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_RMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dR); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 833, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_8);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_2,&__pyx_t_8};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 833, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_2,&__pyx_t_8};
    __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 833, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_9); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 4) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 833, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_14 = __Pyx_PyInt_As_long(__pyx_t_8); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_R = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __pyx_v_dRr = __pyx_t_12;
  __pyx_v_indR = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
  __pyx_v_NR = __pyx_t_14;
+0834:                                                 margin=margin)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 833, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0835:     Z, dZr, indZ, NZ = _Ves_mesh_dlfromL_cython(ZMinMax, dZ, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_ZMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 835, __pyx_L1_error)
/* … */
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
    PyObject* sequence = __pyx_t_8;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 835, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 835, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_3};
    __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 835, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_9); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 4) < 0) __PYX_ERR(0, 835, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 835, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_14 = __Pyx_PyInt_As_long(__pyx_t_3); if (unlikely((__pyx_t_14 == (long)-1) && PyErr_Occurred())) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_Z = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __pyx_v_dZr = __pyx_t_12;
  __pyx_v_indZ = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
  __pyx_v_NZ = __pyx_t_14;
+0836:                                                 margin=margin)
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 836, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_8) < 0) __PYX_ERR(0, 835, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+0837:     Rn, Zn = len(R), len(Z)
  __pyx_t_1 = __Pyx_MemoryView_Len(__pyx_v_R); 
  __pyx_t_15 = __Pyx_MemoryView_Len(__pyx_v_Z); 
  __pyx_v_Rn = __pyx_t_1;
  __pyx_v_Zn = __pyx_t_15;
 0838: 
 0839:     # Number of Phi per R
+0840:     dRPhirRef, dPhir = np.empty((NR,)), np.empty((NR,))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_8 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 840, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_dRPhirRef = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __pyx_v_dPhir = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
+0841:     Ru, dRPhir = np.zeros((NR,)), np.nan*np.ones((NR,))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_8 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_8 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 841, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_Ru = __pyx_t_16;
  __pyx_t_16.memview = NULL;
  __pyx_t_16.data = NULL;
  __pyx_v_dRPhir = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
+0842:     NRPhi, NRPhi0 = np.empty((NR,),dtype=int), np.empty((NR+1,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 842, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_NR + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 842, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 842, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_NRPhi = __pyx_t_13;
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
  __pyx_v_NRPhi0 = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
+0843:     Rratio = int(Cceil(R[NR-1]/R[0]))
  __pyx_t_18 = (__pyx_v_NR - 1);
  __pyx_t_19 = 0;
  __pyx_v_Rratio = ((long)ceil(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_18)) ))) / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_19)) ))))));
+0844:     for ii in range(0,NR):
  __pyx_t_14 = __pyx_v_NR;
  __pyx_t_20 = __pyx_t_14;
  for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
    __pyx_v_ii = __pyx_t_21;
+0845:         NRPhi[ii] = <long>(Cceil(2.*Cpi*R[ii]/dRPhi))
    __pyx_t_22 = __pyx_v_ii;
    __pyx_t_23 = __pyx_v_ii;
    *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_23)) )) = ((long)ceil((((2. * M_PI) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_22)) )))) / __pyx_v_dRPhi)));
+0846:         dRPhirRef[ii] = 2.*Cpi*R[ii]/<double>(NRPhi[ii])
    __pyx_t_24 = __pyx_v_ii;
    __pyx_t_25 = __pyx_v_ii;
    __pyx_t_26 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_26)) )) = (((2. * M_PI) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_24)) )))) / ((double)(*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_25)) )))));
+0847:         dPhir[ii] = 2.*Cpi/<double>(NRPhi[ii])
    __pyx_t_27 = __pyx_v_ii;
    __pyx_t_28 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_28)) )) = ((2. * M_PI) / ((double)(*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_27)) )))));
+0848:         if ii==0:
    __pyx_t_29 = ((__pyx_v_ii == 0) != 0);
    if (__pyx_t_29) {
/* … */
      goto __pyx_L9;
    }
+0849:             NRPhi0[ii] = 0
      __pyx_t_30 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_30)) )) = 0;
+0850:             Phi = np.empty((NR,NRPhi[ii]*Rratio+1))
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_NR); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_31 = __pyx_v_ii;
      __pyx_t_3 = __Pyx_PyInt_From_long((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_31)) ))) * __pyx_v_Rratio) + 1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_32 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_8, PyBUF_WRITABLE); if (unlikely(!__pyx_t_32.memview)) __PYX_ERR(0, 850, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_Phi, 1);
      __pyx_v_Phi = __pyx_t_32;
      __pyx_t_32.memview = NULL;
      __pyx_t_32.data = NULL;
 0851:         else:
+0852:             NRPhi0[ii] = NRPhi0[ii-1] + NRPhi[ii-1]*NZ
    /*else*/ {
      __pyx_t_33 = (__pyx_v_ii - 1);
      __pyx_t_34 = (__pyx_v_ii - 1);
      __pyx_t_35 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_35)) )) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_33)) ))) + ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_34)) ))) * __pyx_v_NZ));
    }
    __pyx_L9:;
+0853:         for jj in range(0,NRPhi[ii]):
    __pyx_t_36 = __pyx_v_ii;
    __pyx_t_37 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_36)) )));
    __pyx_t_38 = __pyx_t_37;
    for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_38; __pyx_t_39+=1) {
      __pyx_v_jj = __pyx_t_39;
+0854:             Phi[ii,jj] = -Cpi + (0.5+<double>jj)*dPhir[ii]
      __pyx_t_40 = __pyx_v_ii;
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 854, __pyx_L1_error) }
      __pyx_t_41 = __pyx_v_ii;
      __pyx_t_42 = __pyx_v_jj;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_41 * __pyx_v_Phi.strides[0]) )) + __pyx_t_42)) )) = ((-M_PI) + ((0.5 + ((double)__pyx_v_jj)) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_40)) )))));
    }
  }
 0855: 
+0856:     if Out.lower()=='(x,y,z)':
  __pyx_t_8 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 856, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_29 = (__Pyx_PyString_Equals(__pyx_t_8, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_29 < 0)) __PYX_ERR(0, 856, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_29) {
/* … */
    goto __pyx_L12;
  }
+0857:         for ii in range(0,NP):
    __pyx_t_14 = __pyx_v_NP;
    __pyx_t_20 = __pyx_t_14;
    for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
      __pyx_v_ii = __pyx_t_21;
+0858:             for jj in range(0,NR+1):
      __pyx_t_37 = (__pyx_v_NR + 1);
      __pyx_t_38 = __pyx_t_37;
      for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_38; __pyx_t_39+=1) {
        __pyx_v_jj = __pyx_t_39;
+0859:                 if ind[ii]-NRPhi0[jj]<0.:
        __pyx_t_43 = __pyx_v_ii;
        __pyx_t_44 = __pyx_v_jj;
        __pyx_t_29 = ((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_43)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_44)) )))) < 0.) != 0);
        if (__pyx_t_29) {
/* … */
        }
      }
      __pyx_L16_break:;
+0860:                     break
          goto __pyx_L16_break;
+0861:             iiR = jj-1
      __pyx_v_iiR = (__pyx_v_jj - 1);
+0862:             iiZ = (ind[ii] - NRPhi0[iiR])//NRPhi[iiR]
      __pyx_t_45 = __pyx_v_ii;
      __pyx_t_46 = __pyx_v_iiR;
      __pyx_t_47 = __pyx_v_iiR;
      __pyx_v_iiZ = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_45)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_46)) )))) / (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_47)) ))));
+0863:             iiphi = ind[ii] - NRPhi0[iiR] - iiZ*NRPhi[iiR]
      __pyx_t_48 = __pyx_v_ii;
      __pyx_t_49 = __pyx_v_iiR;
      __pyx_t_50 = __pyx_v_iiR;
      __pyx_v_iiphi = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_48)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_49)) )))) - (__pyx_v_iiZ * (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_50)) )))));
+0864:             phi = Phi[iiR,iiphi]
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 864, __pyx_L1_error) }
      __pyx_t_51 = __pyx_v_iiR;
      __pyx_t_52 = __pyx_v_iiphi;
      __pyx_v_phi = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_51 * __pyx_v_Phi.strides[0]) )) + __pyx_t_52)) )));
+0865:             Pts[0,ii] = R[iiR]*Ccos(phi)
      __pyx_t_53 = __pyx_v_iiR;
      __pyx_t_54 = 0;
      __pyx_t_55 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_53)) ))) * cos(__pyx_v_phi));
+0866:             Pts[1,ii] = R[iiR]*Csin(phi)
      __pyx_t_56 = __pyx_v_iiR;
      __pyx_t_57 = 1;
      __pyx_t_58 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_58, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_56)) ))) * sin(__pyx_v_phi));
+0867:             Pts[2,ii] = Z[iiZ]
      __pyx_t_59 = __pyx_v_iiZ;
      __pyx_t_60 = 2;
      __pyx_t_61 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Z.data) + __pyx_t_59)) )));
+0868:             dV[ii] = dRr*dZr*dRPhirRef[iiR]
      __pyx_t_62 = __pyx_v_iiR;
      __pyx_t_63 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dV.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_dV.diminfo[0].strides) = ((__pyx_v_dRr * __pyx_v_dZr) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_62)) ))));
+0869:             if Ru[iiR]==0.:
      __pyx_t_64 = __pyx_v_iiR;
      __pyx_t_29 = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Ru.data) + __pyx_t_64)) ))) == 0.) != 0);
      if (__pyx_t_29) {
/* … */
      }
    }
+0870:                 dRPhir[iiR] = dRPhirRef[iiR]
        __pyx_t_65 = __pyx_v_iiR;
        __pyx_t_66 = __pyx_v_iiR;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_66)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_65)) )));
+0871:                 Ru[iiR] = 1.
        __pyx_t_67 = __pyx_v_iiR;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Ru.data) + __pyx_t_67)) )) = 1.;
 0872:     else:
+0873:         for ii in range(0,NP):
  /*else*/ {
    __pyx_t_14 = __pyx_v_NP;
    __pyx_t_20 = __pyx_t_14;
    for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
      __pyx_v_ii = __pyx_t_21;
+0874:             for jj in range(0,NR+1):
      __pyx_t_37 = (__pyx_v_NR + 1);
      __pyx_t_38 = __pyx_t_37;
      for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_38; __pyx_t_39+=1) {
        __pyx_v_jj = __pyx_t_39;
+0875:                 if ind[ii]-NRPhi0[jj]<0.:
        __pyx_t_68 = __pyx_v_ii;
        __pyx_t_69 = __pyx_v_jj;
        __pyx_t_29 = ((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_68)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_69)) )))) < 0.) != 0);
        if (__pyx_t_29) {
/* … */
        }
      }
      __pyx_L22_break:;
+0876:                     break
          goto __pyx_L22_break;
+0877:             iiR = jj-1
      __pyx_v_iiR = (__pyx_v_jj - 1);
+0878:             iiZ = (ind[ii] - NRPhi0[iiR])//NRPhi[iiR]
      __pyx_t_70 = __pyx_v_ii;
      __pyx_t_71 = __pyx_v_iiR;
      __pyx_t_72 = __pyx_v_iiR;
      __pyx_v_iiZ = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_70)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_71)) )))) / (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_72)) ))));
+0879:             iiphi = ind[ii] - NRPhi0[iiR] - iiZ*NRPhi[iiR]
      __pyx_t_73 = __pyx_v_ii;
      __pyx_t_74 = __pyx_v_iiR;
      __pyx_t_75 = __pyx_v_iiR;
      __pyx_v_iiphi = (((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_73)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_74)) )))) - (__pyx_v_iiZ * (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_75)) )))));
+0880:             Pts[0,ii] = R[iiR]
      __pyx_t_76 = __pyx_v_iiR;
      __pyx_t_77 = 0;
      __pyx_t_78 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_77, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_78, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_R.data) + __pyx_t_76)) )));
+0881:             Pts[1,ii] = Z[iiZ]
      __pyx_t_79 = __pyx_v_iiZ;
      __pyx_t_80 = 1;
      __pyx_t_81 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_80, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_81, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Z.data) + __pyx_t_79)) )));
+0882:             Pts[2,ii] = Phi[iiR,iiphi]
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 882, __pyx_L1_error) }
      __pyx_t_82 = __pyx_v_iiR;
      __pyx_t_83 = __pyx_v_iiphi;
      __pyx_t_84 = 2;
      __pyx_t_85 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_84, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_85, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_82 * __pyx_v_Phi.strides[0]) )) + __pyx_t_83)) )));
+0883:             dV[ii] = dRr*dZr*dRPhirRef[iiR]
      __pyx_t_86 = __pyx_v_iiR;
      __pyx_t_87 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dV.rcbuffer->pybuffer.buf, __pyx_t_87, __pyx_pybuffernd_dV.diminfo[0].strides) = ((__pyx_v_dRr * __pyx_v_dZr) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_86)) ))));
+0884:             if Ru[iiR]==0.:
      __pyx_t_88 = __pyx_v_iiR;
      __pyx_t_29 = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Ru.data) + __pyx_t_88)) ))) == 0.) != 0);
      if (__pyx_t_29) {
/* … */
      }
    }
  }
  __pyx_L12:;
+0885:                 dRPhir[iiR] = dRPhirRef[iiR]
        __pyx_t_89 = __pyx_v_iiR;
        __pyx_t_90 = __pyx_v_iiR;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhir.data) + __pyx_t_90)) )) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_89)) )));
+0886:                 Ru[iiR] = 1.
        __pyx_t_91 = __pyx_v_iiR;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_Ru.data) + __pyx_t_91)) )) = 1.;
 0887: 
+0888:     return Pts, dV, dRr, dZr, np.asarray(dRPhir)[~np.isnan(dRPhir)]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dRr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dRPhir, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isnan); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dRPhir, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_92 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_92 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_92)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_92);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_4 = (__pyx_t_92) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_92, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_92); __pyx_t_92 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyNumber_Invert(__pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = PyTuple_New(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 888, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dV));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dV));
  PyTuple_SET_ITEM(__pyx_t_9, 1, ((PyObject *)__pyx_v_dV));
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_4);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_9;
  __pyx_t_9 = 0;
  goto __pyx_L0;
 0889: 
 0890: 
 0891: 
 0892: ########################################################
 0893: ########################################################
 0894: #       Meshing - Volume - Lin
 0895: ########################################################
 0896: 
 0897: 
+0898: def _Ves_Vmesh_Lin_SubFromD_cython(double dX, double dY, double dZ,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_27_Ves_Vmesh_Lin_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_26_Ves_Vmesh_Lin_SubFromD_cython[] = " Return the desired submesh indicated by the limits (DX,DY,DZ),\n    for the desired resolution (dX,dY,dZ)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_27_Ves_Vmesh_Lin_SubFromD_cython = {"_Ves_Vmesh_Lin_SubFromD_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_27_Ves_Vmesh_Lin_SubFromD_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_26_Ves_Vmesh_Lin_SubFromD_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_27_Ves_Vmesh_Lin_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dX;
  double __pyx_v_dY;
  double __pyx_v_dZ;
  __Pyx_memviewslice __pyx_v_XMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_YMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ZMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_DX = 0;
  PyObject *__pyx_v_DY = 0;
  PyObject *__pyx_v_DZ = 0;
  PyObject *__pyx_v_VPoly = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Lin_SubFromD_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dX,&__pyx_n_s_dY,&__pyx_n_s_dZ,&__pyx_n_s_XMinMax,&__pyx_n_s_YMinMax,&__pyx_n_s_ZMinMax,&__pyx_n_s_DX,&__pyx_n_s_DY,&__pyx_n_s_DZ,&__pyx_n_s_VPoly,&__pyx_n_s_margin,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_26_Ves_Vmesh_Lin_SubFromD_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dX, double __pyx_v_dY, double __pyx_v_dZ, __Pyx_memviewslice __pyx_v_XMinMax, __Pyx_memviewslice __pyx_v_YMinMax, __Pyx_memviewslice __pyx_v_ZMinMax, PyObject *__pyx_v_DX, PyObject *__pyx_v_DY, PyObject *__pyx_v_DZ, PyObject *__pyx_v_VPoly, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_X = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Y = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Z = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dXr;
  double __pyx_v_dYr;
  double __pyx_v_dZr;
  double __pyx_v_dV;
  PyArrayObject *__pyx_v_indX = 0;
  PyArrayObject *__pyx_v_indY = 0;
  PyArrayObject *__pyx_v_indZ = 0;
  int __pyx_v_NX;
  int __pyx_v_NY;
  CYTHON_UNUSED int __pyx_v_NZ;
  int __pyx_v_Xn;
  int __pyx_v_Yn;
  int __pyx_v_Zn;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyObject *__pyx_v_indin = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indX;
  __Pyx_Buffer __pyx_pybuffer_indX;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indY;
  __Pyx_Buffer __pyx_pybuffer_indY;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ;
  __Pyx_Buffer __pyx_pybuffer_indZ;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Lin_SubFromD_cython", 0);
  __pyx_pybuffer_indX.pybuffer.buf = NULL;
  __pyx_pybuffer_indX.refcount = 0;
  __pyx_pybuffernd_indX.data = NULL;
  __pyx_pybuffernd_indX.rcbuffer = &__pyx_pybuffer_indX;
  __pyx_pybuffer_indY.pybuffer.buf = NULL;
  __pyx_pybuffer_indY.refcount = 0;
  __pyx_pybuffernd_indY.data = NULL;
  __pyx_pybuffernd_indY.rcbuffer = &__pyx_pybuffer_indY;
  __pyx_pybuffer_indZ.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ.refcount = 0;
  __pyx_pybuffernd_indZ.data = NULL;
  __pyx_pybuffernd_indZ.rcbuffer = &__pyx_pybuffer_indZ;
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Lin_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_X, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Y, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Z, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_indX);
  __Pyx_XDECREF((PyObject *)__pyx_v_indY);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_indin);
  __PYX_XDEC_MEMVIEW(&__pyx_v_XMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_YMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ZMinMax, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__184 = PyTuple_Pack(30, __pyx_n_s_dX, __pyx_n_s_dY, __pyx_n_s_dZ, __pyx_n_s_XMinMax, __pyx_n_s_YMinMax, __pyx_n_s_ZMinMax, __pyx_n_s_DX, __pyx_n_s_DY, __pyx_n_s_DZ, __pyx_n_s_VPoly, __pyx_n_s_margin, __pyx_n_s_X, __pyx_n_s_Y, __pyx_n_s_Z, __pyx_n_s_dXr, __pyx_n_s_dYr, __pyx_n_s_dZr, __pyx_n_s_dV, __pyx_n_s_indX, __pyx_n_s_indY, __pyx_n_s_indZ, __pyx_n_s_NX, __pyx_n_s_NY, __pyx_n_s_NZ, __pyx_n_s_Xn, __pyx_n_s_Yn, __pyx_n_s_Zn, __pyx_n_s_Pts, __pyx_n_s_ind, __pyx_n_s_indin); if (unlikely(!__pyx_tuple__184)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__184);
  __Pyx_GIVEREF(__pyx_tuple__184);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_27_Ves_Vmesh_Lin_SubFromD_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Vmesh_Lin_SubFromD_cython, __pyx_t_1) < 0) __PYX_ERR(0, 898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__185 = (PyObject*)__Pyx_PyCode_New(11, 0, 30, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__184, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Vmesh_Lin_SubFromD_cython, 898, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__185)) __PYX_ERR(0, 898, __pyx_L1_error)
 0899:                                    double[::1] XMinMax, double[::1] YMinMax,
 0900:                                    double[::1] ZMinMax,
+0901:                                    DX=None, DY=None, DZ=None, VPoly=None,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dX)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dY)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, 1); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dZ)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, 2); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_XMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, 3); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, 4); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ZMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, 5); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DX);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DY);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DZ);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Vmesh_Lin_SubFromD_cython") < 0)) __PYX_ERR(0, 898, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dX = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dX == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 898, __pyx_L3_error)
    __pyx_v_dY = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dY == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 898, __pyx_L3_error)
    __pyx_v_dZ = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dZ == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 898, __pyx_L3_error)
    __pyx_v_XMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_XMinMax.memview)) __PYX_ERR(0, 899, __pyx_L3_error)
    __pyx_v_YMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YMinMax.memview)) __PYX_ERR(0, 899, __pyx_L3_error)
    __pyx_v_ZMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ZMinMax.memview)) __PYX_ERR(0, 900, __pyx_L3_error)
    __pyx_v_DX = values[6];
    __pyx_v_DY = values[7];
    __pyx_v_DZ = values[8];
    __pyx_v_VPoly = values[9];
    if (values[10]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 902, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__46;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromD_cython", 0, 6, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 898, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Lin_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_26_Ves_Vmesh_Lin_SubFromD_cython(__pyx_self, __pyx_v_dX, __pyx_v_dY, __pyx_v_dZ, __pyx_v_XMinMax, __pyx_v_YMinMax, __pyx_v_ZMinMax, __pyx_v_DX, __pyx_v_DY, __pyx_v_DZ, __pyx_v_VPoly, __pyx_v_margin);
+0902:                                    double margin=_VSMALL):
  __pyx_k__46 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0903:     """ Return the desired submesh indicated by the limits (DX,DY,DZ),
 0904:     for the desired resolution (dX,dY,dZ)
 0905:     """
 0906:     cdef double[::1] X, Y, Z
 0907:     cdef double dXr, dYr, dZr, dV
 0908:     cdef np.ndarray[long,ndim=1] indX, indY, indZ
 0909:     cdef int NX, NY, NZ, Xn, Yn, Zn
 0910:     cdef np.ndarray[double,ndim=2] Pts
 0911:     cdef np.ndarray[long,ndim=1] ind
 0912: 
 0913:     # Get the actual X, Y and Z resolutions and mesh elements
+0914:     X, dXr, indX, NX = _Ves_mesh_dlfromL_cython(XMinMax, dX, DX, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_XMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(__pyx_v_DX);
  __Pyx_GIVEREF(__pyx_v_DX);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_DX);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 914, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 914, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 914, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 914, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_X = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dXr = __pyx_t_9;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_v_indX, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_indX.diminfo[0].strides = __pyx_pybuffernd_indX.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indX.diminfo[0].shape = __pyx_pybuffernd_indX.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 914, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_indX = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_NX = __pyx_t_10;
+0915:                                                 margin=margin)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_2) < 0) __PYX_ERR(0, 914, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0916:     Y, dYr, indY, NY = _Ves_mesh_dlfromL_cython(YMinMax, dY, DY, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_YMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_DY);
  __Pyx_GIVEREF(__pyx_v_DY);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_DY);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 916, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 916, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 916, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 916, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 916, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 916, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_Y = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dYr = __pyx_t_9;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY.rcbuffer->pybuffer, (PyObject*)__pyx_v_indY, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      }
      __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_indY.diminfo[0].strides = __pyx_pybuffernd_indY.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indY.diminfo[0].shape = __pyx_pybuffernd_indY.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 916, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_indY = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_v_NY = __pyx_t_10;
+0917:                                                 margin=margin)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 916, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0918:     Z, dZr, indZ, NZ = _Ves_mesh_dlfromL_cython(ZMinMax, dZ, DZ, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_ZMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_DZ);
  __Pyx_GIVEREF(__pyx_v_DZ);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_DZ);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 918, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 918, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 918, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 918, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 918, __pyx_L1_error)
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_Z = __pyx_t_8;
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_v_dZr = __pyx_t_9;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_indZ.diminfo[0].strides = __pyx_pybuffernd_indZ.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ.diminfo[0].shape = __pyx_pybuffernd_indZ.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 918, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_indZ = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_v_NZ = __pyx_t_10;
+0919:                                                 margin=margin)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 918, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0920:     Xn, Yn, Zn = len(X), len(Y), len(Z)
  __pyx_t_16 = __Pyx_MemoryView_Len(__pyx_v_X); 
  __pyx_t_17 = __Pyx_MemoryView_Len(__pyx_v_Y); 
  __pyx_t_18 = __Pyx_MemoryView_Len(__pyx_v_Z); 
  __pyx_v_Xn = __pyx_t_16;
  __pyx_v_Yn = __pyx_t_17;
  __pyx_v_Zn = __pyx_t_18;
 0921: 
+0922:     Pts = np.array([np.tile(X,(Yn*Zn,1)).flatten(),
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_tile); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_X, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_19 = __Pyx_PyInt_From_int((__pyx_v_Yn * __pyx_v_Zn)); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_20 = PyTuple_New(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_19);
  PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_19);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_20, 1, __pyx_int_1);
  __pyx_t_19 = 0;
  __pyx_t_19 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_19)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_19);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_2, __pyx_t_20};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_2, __pyx_t_20};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  } else
  #endif
  {
    __pyx_t_21 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    if (__pyx_t_19) {
      __Pyx_GIVEREF(__pyx_t_19); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_19); __pyx_t_19 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_10, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_10, __pyx_t_20);
    __pyx_t_2 = 0;
    __pyx_t_20 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_21, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 922, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_t_22 = PyList_New(3); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_22, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_22, 1, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_20);
  PyList_SET_ITEM(__pyx_t_22, 2, __pyx_t_20);
  __pyx_t_1 = 0;
  __pyx_t_6 = 0;
  __pyx_t_20 = 0;
  __pyx_t_20 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_20)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_20);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_20) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_20, __pyx_t_22) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_22);
  __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 922, __pyx_L1_error)
  __pyx_t_25 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      }
      __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 922, __pyx_L1_error)
  }
  __pyx_t_25 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0923:                     np.tile(np.repeat(Y,Xn),(Zn,1)).flatten(),
  __Pyx_GetModuleGlobalName(__pyx_t_21, __pyx_n_s_np); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_21, __pyx_n_s_tile); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_repeat); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_Y, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_22 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_23 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_19))) {
    __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_19);
    if (likely(__pyx_t_23)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19);
      __Pyx_INCREF(__pyx_t_23);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_19, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_19)) {
    PyObject *__pyx_temp[3] = {__pyx_t_23, __pyx_t_2, __pyx_t_22};
    __pyx_t_21 = __Pyx_PyFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_19)) {
    PyObject *__pyx_temp[3] = {__pyx_t_23, __pyx_t_2, __pyx_t_22};
    __pyx_t_21 = __Pyx_PyCFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  } else
  #endif
  {
    __pyx_t_24 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_24);
    if (__pyx_t_23) {
      __Pyx_GIVEREF(__pyx_t_23); PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_23); __pyx_t_23 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_24, 0+__pyx_t_10, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_22);
    PyTuple_SET_ITEM(__pyx_t_24, 1+__pyx_t_10, __pyx_t_22);
    __pyx_t_2 = 0;
    __pyx_t_22 = 0;
    __pyx_t_21 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_24, NULL); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PyInt_From_int(__pyx_v_Zn); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_24 = PyTuple_New(2); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_GIVEREF(__pyx_t_19);
  PyTuple_SET_ITEM(__pyx_t_24, 0, __pyx_t_19);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_24, 1, __pyx_int_1);
  __pyx_t_19 = 0;
  __pyx_t_19 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
    __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
    if (likely(__pyx_t_19)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
      __Pyx_INCREF(__pyx_t_19);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_20, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_20)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_21, __pyx_t_24};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_20)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_21, __pyx_t_24};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  {
    __pyx_t_22 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_22);
    if (__pyx_t_19) {
      __Pyx_GIVEREF(__pyx_t_19); PyTuple_SET_ITEM(__pyx_t_22, 0, __pyx_t_19); __pyx_t_19 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_21);
    PyTuple_SET_ITEM(__pyx_t_22, 0+__pyx_t_10, __pyx_t_21);
    __Pyx_GIVEREF(__pyx_t_24);
    PyTuple_SET_ITEM(__pyx_t_22, 1+__pyx_t_10, __pyx_t_24);
    __pyx_t_21 = 0;
    __pyx_t_24 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_t_22, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 923, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_20);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_20, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
+0924:                     np.repeat(Z,Xn*Yn)])
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_repeat); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_Z, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_24 = __Pyx_PyInt_From_int((__pyx_v_Xn * __pyx_v_Yn)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __pyx_t_21 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_22))) {
    __pyx_t_21 = PyMethod_GET_SELF(__pyx_t_22);
    if (likely(__pyx_t_21)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
      __Pyx_INCREF(__pyx_t_21);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_22, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_22)) {
    PyObject *__pyx_temp[3] = {__pyx_t_21, __pyx_t_4, __pyx_t_24};
    __pyx_t_20 = __Pyx_PyFunction_FastCall(__pyx_t_22, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 924, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_22)) {
    PyObject *__pyx_temp[3] = {__pyx_t_21, __pyx_t_4, __pyx_t_24};
    __pyx_t_20 = __Pyx_PyCFunction_FastCall(__pyx_t_22, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 924, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  } else
  #endif
  {
    __pyx_t_19 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_19);
    if (__pyx_t_21) {
      __Pyx_GIVEREF(__pyx_t_21); PyTuple_SET_ITEM(__pyx_t_19, 0, __pyx_t_21); __pyx_t_21 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_19, 0+__pyx_t_10, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_24);
    PyTuple_SET_ITEM(__pyx_t_19, 1+__pyx_t_10, __pyx_t_24);
    __pyx_t_4 = 0;
    __pyx_t_24 = 0;
    __pyx_t_20 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_t_19, NULL); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  }
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+0925:     ind = np.repeat(NX*NY*indZ,Xn*Yn) + \
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_repeat); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_NY)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_20 = PyNumber_Multiply(__pyx_t_5, ((PyObject *)__pyx_v_indZ)); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_Xn * __pyx_v_Yn)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_22))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_22);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_22, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_22)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_20, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_22, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 925, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_22)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_20, __pyx_t_5};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_22, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 925, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_1 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 925, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_10, __pyx_t_20);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_10, __pyx_t_5);
    __pyx_t_20 = 0;
    __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 925, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
/* … */
  __pyx_t_20 = PyNumber_Add(__pyx_t_3, __pyx_t_22); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
+0926:       np.tile(np.repeat(NX*indY,Xn),(Zn,1)).flatten() + \
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_tile); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_repeat); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_NX); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_24 = PyNumber_Multiply(__pyx_t_6, ((PyObject *)__pyx_v_indY)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_24);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_19))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_19);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_19);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_19, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_19)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_24, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_19)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_24, __pyx_t_6};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_19, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_21 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_21);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_24);
    PyTuple_SET_ITEM(__pyx_t_21, 0+__pyx_t_10, __pyx_t_24);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_21, 1+__pyx_t_10, __pyx_t_6);
    __pyx_t_24 = 0;
    __pyx_t_6 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_19, __pyx_t_21, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  }
  __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
  __pyx_t_19 = __Pyx_PyInt_From_int(__pyx_v_Zn); if (unlikely(!__pyx_t_19)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_19);
  __pyx_t_21 = PyTuple_New(2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_GIVEREF(__pyx_t_19);
  PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_19);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_21, 1, __pyx_int_1);
  __pyx_t_19 = 0;
  __pyx_t_19 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_20))) {
    __pyx_t_19 = PyMethod_GET_SELF(__pyx_t_20);
    if (likely(__pyx_t_19)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
      __Pyx_INCREF(__pyx_t_19);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_20, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_20)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_5, __pyx_t_21};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_20)) {
    PyObject *__pyx_temp[3] = {__pyx_t_19, __pyx_t_5, __pyx_t_21};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_20, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_19) {
      __Pyx_GIVEREF(__pyx_t_19); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_19); __pyx_t_19 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_10, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_21);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_10, __pyx_t_21);
    __pyx_t_5 = 0;
    __pyx_t_21 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_20, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 926, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_flatten); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_20))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_20);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_20);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_20, function);
    }
  }
  __pyx_t_22 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_20, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
/* … */
  __pyx_t_6 = PyNumber_Add(__pyx_t_20, __pyx_t_22); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
  __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 926, __pyx_L1_error)
  __pyx_t_26 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_26, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 925, __pyx_L1_error)
  }
  __pyx_t_26 = 0;
  __pyx_v_ind = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
+0927:       np.tile(indX,(Yn*Zn,1)).flatten()
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_tile); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_Yn * __pyx_v_Zn)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_21 = PyTuple_New(2); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_21, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_21, 1, __pyx_int_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  __pyx_t_10 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_10 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_indX), __pyx_t_21};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_indX), __pyx_t_21};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_indX));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_indX));
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_10, ((PyObject *)__pyx_v_indX));
    __Pyx_GIVEREF(__pyx_t_21);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_10, __pyx_t_21);
    __pyx_t_21 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_22 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0928:     dV = dXr*dYr*dZr
  __pyx_v_dV = ((__pyx_v_dXr * __pyx_v_dYr) * __pyx_v_dZr);
 0929: 
+0930:     if VPoly is not None:
  __pyx_t_27 = (__pyx_v_VPoly != Py_None);
  __pyx_t_28 = (__pyx_t_27 != 0);
  if (__pyx_t_28) {
/* … */
  }
+0931:         indin = Path(VPoly.T).contains_points(Pts[1:,:].T, transform=None,
    __Pyx_GetModuleGlobalName(__pyx_t_22, __pyx_n_s_Path); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_22);
    __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_v_VPoly, __pyx_n_s_T); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_22))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_22);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_22);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_22, function);
      }
    }
    __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_22, __pyx_t_3, __pyx_t_20) : __Pyx_PyObject_CallOneArg(__pyx_t_22, __pyx_t_20);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_22);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_tuple__35); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_T); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_20);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_20);
    __pyx_t_20 = 0;
    __pyx_t_20 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 931, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_20, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 931, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_22, __pyx_t_6, __pyx_t_20); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 931, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
    __pyx_v_indin = __pyx_t_3;
    __pyx_t_3 = 0;
 0932:                                               radius=0.0)
+0933:         Pts, ind = Pts[:,indin], ind[indin]
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_indin);
    __Pyx_GIVEREF(__pyx_v_indin);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_indin);
    __pyx_t_20 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_3); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_20);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_20) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_20, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 933, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_indin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 933, __pyx_L1_error)
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_20);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
        }
        __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 933, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_20));
    __pyx_t_20 = 0;
    __pyx_t_26 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_26, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
        }
        __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 933, __pyx_L1_error)
    }
    __pyx_t_26 = 0;
    __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
 0934: 
+0935:     return Pts, dV, ind.astype(int), dXr, dYr, dZr
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dV); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ind), __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_22 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_22 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_22)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_22);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_20 = (__pyx_t_22) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_22, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
  if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_22 = PyFloat_FromDouble(__pyx_v_dYr); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_22);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dZr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_21 = PyTuple_New(6); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_21);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_21, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_21, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_20);
  PyTuple_SET_ITEM(__pyx_t_21, 2, __pyx_t_20);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_21, 3, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_22);
  PyTuple_SET_ITEM(__pyx_t_21, 4, __pyx_t_22);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_21, 5, __pyx_t_5);
  __pyx_t_3 = 0;
  __pyx_t_20 = 0;
  __pyx_t_6 = 0;
  __pyx_t_22 = 0;
  __pyx_t_5 = 0;
  __pyx_r = __pyx_t_21;
  __pyx_t_21 = 0;
  goto __pyx_L0;
 0936: 
 0937: 
+0938: def _Ves_Vmesh_Lin_SubFromInd_cython(double dX, double dY, double dZ,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_29_Ves_Vmesh_Lin_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_28_Ves_Vmesh_Lin_SubFromInd_cython[] = " Return the desired submesh indicated by the limits (DX,DY,DZ),\n    for the desired resolution (dX,dY,dZ)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_29_Ves_Vmesh_Lin_SubFromInd_cython = {"_Ves_Vmesh_Lin_SubFromInd_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_29_Ves_Vmesh_Lin_SubFromInd_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_28_Ves_Vmesh_Lin_SubFromInd_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_29_Ves_Vmesh_Lin_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dX;
  double __pyx_v_dY;
  double __pyx_v_dZ;
  __Pyx_memviewslice __pyx_v_XMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_YMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ZMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_ind = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Lin_SubFromInd_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dX,&__pyx_n_s_dY,&__pyx_n_s_dZ,&__pyx_n_s_XMinMax,&__pyx_n_s_YMinMax,&__pyx_n_s_ZMinMax,&__pyx_n_s_ind,&__pyx_n_s_margin,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dX)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dY)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 1); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dZ)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 2); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_XMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 3); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_YMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 4); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ZMinMax)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 5); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, 6); __PYX_ERR(0, 938, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Vmesh_Lin_SubFromInd_cython") < 0)) __PYX_ERR(0, 938, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dX = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dX == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 938, __pyx_L3_error)
    __pyx_v_dY = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dY == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 938, __pyx_L3_error)
    __pyx_v_dZ = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dZ == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 938, __pyx_L3_error)
    __pyx_v_XMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_XMinMax.memview)) __PYX_ERR(0, 939, __pyx_L3_error)
    __pyx_v_YMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_YMinMax.memview)) __PYX_ERR(0, 939, __pyx_L3_error)
    __pyx_v_ZMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ZMinMax.memview)) __PYX_ERR(0, 940, __pyx_L3_error)
    __pyx_v_ind = ((PyArrayObject *)values[6]);
    if (values[7]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__47;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Vmesh_Lin_SubFromInd_cython", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 938, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Lin_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ind), __pyx_ptype_5numpy_ndarray, 1, "ind", 0))) __PYX_ERR(0, 941, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_28_Ves_Vmesh_Lin_SubFromInd_cython(__pyx_self, __pyx_v_dX, __pyx_v_dY, __pyx_v_dZ, __pyx_v_XMinMax, __pyx_v_YMinMax, __pyx_v_ZMinMax, __pyx_v_ind, __pyx_v_margin);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_28_Ves_Vmesh_Lin_SubFromInd_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dX, double __pyx_v_dY, double __pyx_v_dZ, __Pyx_memviewslice __pyx_v_XMinMax, __Pyx_memviewslice __pyx_v_YMinMax, __Pyx_memviewslice __pyx_v_ZMinMax, PyArrayObject *__pyx_v_ind, double __pyx_v_margin) {
  PyArrayObject *__pyx_v_X = 0;
  PyArrayObject *__pyx_v_Y = 0;
  PyArrayObject *__pyx_v_Z = 0;
  double __pyx_v_dXr;
  double __pyx_v_dYr;
  double __pyx_v_dZr;
  double __pyx_v_dV;
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_bla = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_indX = 0;
  PyArrayObject *__pyx_v_indY = 0;
  PyArrayObject *__pyx_v_indZ = 0;
  int __pyx_v_NX;
  int __pyx_v_NY;
  CYTHON_UNUSED int __pyx_v_NZ;
  PyArrayObject *__pyx_v_Pts = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_X;
  __Pyx_Buffer __pyx_pybuffer_X;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Y;
  __Pyx_Buffer __pyx_pybuffer_Y;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Z;
  __Pyx_Buffer __pyx_pybuffer_Z;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indX;
  __Pyx_Buffer __pyx_pybuffer_indX;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indY;
  __Pyx_Buffer __pyx_pybuffer_indY;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ;
  __Pyx_Buffer __pyx_pybuffer_indZ;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Vmesh_Lin_SubFromInd_cython", 0);
  __pyx_pybuffer_X.pybuffer.buf = NULL;
  __pyx_pybuffer_X.refcount = 0;
  __pyx_pybuffernd_X.data = NULL;
  __pyx_pybuffernd_X.rcbuffer = &__pyx_pybuffer_X;
  __pyx_pybuffer_Y.pybuffer.buf = NULL;
  __pyx_pybuffer_Y.refcount = 0;
  __pyx_pybuffernd_Y.data = NULL;
  __pyx_pybuffernd_Y.rcbuffer = &__pyx_pybuffer_Y;
  __pyx_pybuffer_Z.pybuffer.buf = NULL;
  __pyx_pybuffer_Z.refcount = 0;
  __pyx_pybuffernd_Z.data = NULL;
  __pyx_pybuffernd_Z.rcbuffer = &__pyx_pybuffer_Z;
  __pyx_pybuffer_indX.pybuffer.buf = NULL;
  __pyx_pybuffer_indX.refcount = 0;
  __pyx_pybuffernd_indX.data = NULL;
  __pyx_pybuffernd_indX.rcbuffer = &__pyx_pybuffer_indX;
  __pyx_pybuffer_indY.pybuffer.buf = NULL;
  __pyx_pybuffer_indY.refcount = 0;
  __pyx_pybuffernd_indY.data = NULL;
  __pyx_pybuffernd_indY.rcbuffer = &__pyx_pybuffer_indY;
  __pyx_pybuffer_indZ.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ.refcount = 0;
  __pyx_pybuffernd_indZ.data = NULL;
  __pyx_pybuffernd_indZ.rcbuffer = &__pyx_pybuffer_indZ;
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 938, __pyx_L1_error)
  }
  __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_17);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Vmesh_Lin_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_X);
  __Pyx_XDECREF((PyObject *)__pyx_v_Y);
  __Pyx_XDECREF((PyObject *)__pyx_v_Z);
  __PYX_XDEC_MEMVIEW(&__pyx_v_bla, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_indX);
  __Pyx_XDECREF((PyObject *)__pyx_v_indY);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __PYX_XDEC_MEMVIEW(&__pyx_v_XMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_YMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ZMinMax, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__186 = PyTuple_Pack(26, __pyx_n_s_dX, __pyx_n_s_dY, __pyx_n_s_dZ, __pyx_n_s_XMinMax, __pyx_n_s_YMinMax, __pyx_n_s_ZMinMax, __pyx_n_s_ind, __pyx_n_s_margin, __pyx_n_s_X, __pyx_n_s_Y, __pyx_n_s_Z, __pyx_n_s_dXr, __pyx_n_s_dYr, __pyx_n_s_dZr, __pyx_n_s_dV, __pyx_n_s_bla, __pyx_n_s_indX, __pyx_n_s_indY, __pyx_n_s_indZ, __pyx_n_s_NX, __pyx_n_s_NY, __pyx_n_s_NZ, __pyx_n_s_Xn, __pyx_n_s_Yn, __pyx_n_s_Zn, __pyx_n_s_Pts); if (unlikely(!__pyx_tuple__186)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__186);
  __Pyx_GIVEREF(__pyx_tuple__186);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_29_Ves_Vmesh_Lin_SubFromInd_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Vmesh_Lin_SubFromInd_cython, __pyx_t_1) < 0) __PYX_ERR(0, 938, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__187 = (PyObject*)__Pyx_PyCode_New(8, 0, 26, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__186, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Vmesh_Lin_SubFromInd_cython, 938, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__187)) __PYX_ERR(0, 938, __pyx_L1_error)
 0939:                                      double[::1] XMinMax, double[::1] YMinMax,
 0940:                                      double[::1] ZMinMax,
 0941:                                      np.ndarray[long,ndim=1] ind,
+0942:                                      double margin=_VSMALL):
  __pyx_k__47 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 0943:     """ Return the desired submesh indicated by the limits (DX,DY,DZ),
 0944:     for the desired resolution (dX,dY,dZ)
 0945:     """
 0946: 
 0947:     cdef np.ndarray[double,ndim=1] X, Y, Z
 0948:     cdef double dXr, dYr, dZr, dV
 0949:     cdef long[::1] bla
 0950:     cdef np.ndarray[long,ndim=1] indX, indY, indZ
 0951:     cdef int NX, NY, NZ, Xn, Yn, Zn
 0952:     cdef np.ndarray[double,ndim=2] Pts
 0953: 
 0954:     # Get the actual X, Y and Z resolutions and mesh elements
+0955:     X, dXr, bla, NX = _Ves_mesh_dlfromL_cython(XMinMax, dX, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_XMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 955, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 955, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 955, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_1,&__pyx_t_5};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 955, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 955, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 955, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 955, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_X.diminfo[0].strides = __pyx_pybuffernd_X.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_X.diminfo[0].shape = __pyx_pybuffernd_X.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 955, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_X = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_dXr = __pyx_t_8;
  __pyx_v_bla = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_NX = __pyx_t_10;
+0956:                                                margin=margin)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 956, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_2) < 0) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0957:     Y, dYr, bla, NY = _Ves_mesh_dlfromL_cython(YMinMax, dY, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_YMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 957, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 957, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 957, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_4,&__pyx_t_2,&__pyx_t_3};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 957, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 957, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 957, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y.rcbuffer->pybuffer, (PyObject*)__pyx_v_Y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      }
      __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_Y.diminfo[0].strides = __pyx_pybuffernd_Y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Y.diminfo[0].shape = __pyx_pybuffernd_Y.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 957, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_Y = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_v_dYr = __pyx_t_8;
  __PYX_XDEC_MEMVIEW(&__pyx_v_bla, 1);
  __pyx_v_bla = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_NY = __pyx_t_10;
+0958:                                                margin=margin)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 957, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+0959:     Z, dZr, bla, NZ = _Ves_mesh_dlfromL_cython(ZMinMax, dZ, None, Lim=True,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_ZMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dZ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 959, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 959, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 959, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_4,&__pyx_t_5,&__pyx_t_1};
    __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 959, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(0, 959, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 959, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 959, __pyx_L1_error)
  __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_Z.diminfo[0].strides = __pyx_pybuffernd_Z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z.diminfo[0].shape = __pyx_pybuffernd_Z.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 959, __pyx_L1_error)
  }
  __pyx_t_11 = 0;
  __pyx_v_Z = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_v_dZr = __pyx_t_8;
  __PYX_XDEC_MEMVIEW(&__pyx_v_bla, 1);
  __pyx_v_bla = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_v_NZ = __pyx_t_10;
+0960:                                                margin=margin)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0961: 
+0962:     indZ = ind // (NX*NY)
  __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_NY)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_FloorDivide(((PyObject *)__pyx_v_ind), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 962, __pyx_L1_error)
  __pyx_t_16 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      }
      __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_indZ.diminfo[0].strides = __pyx_pybuffernd_indZ.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ.diminfo[0].shape = __pyx_pybuffernd_indZ.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 962, __pyx_L1_error)
  }
  __pyx_t_16 = 0;
  __pyx_v_indZ = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+0963:     indY = (ind - NX*NY*indZ) // NX
  __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_NY)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, ((PyObject *)__pyx_v_indZ)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Subtract(((PyObject *)__pyx_v_ind), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 963, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 963, __pyx_L1_error)
  __pyx_t_16 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY.rcbuffer->pybuffer, (PyObject*)__pyx_v_indY, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_indY.diminfo[0].strides = __pyx_pybuffernd_indY.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indY.diminfo[0].shape = __pyx_pybuffernd_indY.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 963, __pyx_L1_error)
  }
  __pyx_t_16 = 0;
  __pyx_v_indY = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+0964:     indX = ind - NX*NY*indZ - NX*indY
  __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_NY)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_5, ((PyObject *)__pyx_v_indZ)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Subtract(((PyObject *)__pyx_v_ind), __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, ((PyObject *)__pyx_v_indY)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Subtract(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 964, __pyx_L1_error)
  __pyx_t_16 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_v_indX, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_13);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_14, __pyx_t_13);
      }
      __pyx_t_15 = __pyx_t_14 = __pyx_t_13 = 0;
    }
    __pyx_pybuffernd_indX.diminfo[0].strides = __pyx_pybuffernd_indX.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indX.diminfo[0].shape = __pyx_pybuffernd_indX.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 964, __pyx_L1_error)
  }
  __pyx_t_16 = 0;
  __pyx_v_indX = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0965:     Pts = np.array([X[indX.astype(int)],
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_indX), __pyx_n_s_astype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_X), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_1, 2, __pyx_t_6);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 965, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_10 < 0)) {
      PyErr_Fetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_13, __pyx_t_14, __pyx_t_15);
      }
      __pyx_t_13 = __pyx_t_14 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 965, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
+0966:                     Y[indY.astype(int)],
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_indY), __pyx_n_s_astype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Y), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0967:                     Z[indZ.astype(int)]])
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_indZ), __pyx_n_s_astype); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_17 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_17 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_17)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_17);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_17) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_17, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z), __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0968:     dV = dXr*dYr*dZr
  __pyx_v_dV = ((__pyx_v_dXr * __pyx_v_dYr) * __pyx_v_dZr);
 0969: 
+0970:     return Pts, dV, dXr, dYr, dZr
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dV); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dYr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dZr); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyTuple_New(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 0971: 
 0972: 
 0973: 
 0974: ########################################################
 0975: ########################################################
 0976: #       Meshing - Surface - Tor
 0977: ########################################################
 0978: 
+0979: def _getBoundsInter2AngSeg(bool Full, double Phi0, double Phi1,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_31_getBoundsInter2AngSeg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_30_getBoundsInter2AngSeg[] = " Return Inter=True if an intersection exist (all angles in radians\n    in [-pi;pi])\n\n    If Inter, return Bounds, a list of tuples indicating the segments defining\n    the intersection, with\n    The intervals are ordered from lowest index to highest index (with respect\n    to [Phi0,Phi1])\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_31_getBoundsInter2AngSeg = {"_getBoundsInter2AngSeg", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_31_getBoundsInter2AngSeg, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_30_getBoundsInter2AngSeg};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_31_getBoundsInter2AngSeg(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyBoolObject *__pyx_v_Full = 0;
  double __pyx_v_Phi0;
  double __pyx_v_Phi1;
  double __pyx_v_DPhi0;
  double __pyx_v_DPhi1;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_getBoundsInter2AngSeg (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Full,&__pyx_n_s_Phi0,&__pyx_n_s_Phi1,&__pyx_n_s_DPhi0,&__pyx_n_s_DPhi1,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Full)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Phi0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_getBoundsInter2AngSeg", 1, 5, 5, 1); __PYX_ERR(0, 979, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Phi1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_getBoundsInter2AngSeg", 1, 5, 5, 2); __PYX_ERR(0, 979, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DPhi0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_getBoundsInter2AngSeg", 1, 5, 5, 3); __PYX_ERR(0, 979, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DPhi1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_getBoundsInter2AngSeg", 1, 5, 5, 4); __PYX_ERR(0, 979, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_getBoundsInter2AngSeg") < 0)) __PYX_ERR(0, 979, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
    }
    __pyx_v_Full = ((PyBoolObject *)values[0]);
    __pyx_v_Phi0 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_Phi0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 979, __pyx_L3_error)
    __pyx_v_Phi1 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Phi1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 979, __pyx_L3_error)
    __pyx_v_DPhi0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_DPhi0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 980, __pyx_L3_error)
    __pyx_v_DPhi1 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_DPhi1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 980, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_getBoundsInter2AngSeg", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 979, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._getBoundsInter2AngSeg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Full), __pyx_ptype_7cpython_4bool_bool, 1, "Full", 0))) __PYX_ERR(0, 979, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_30_getBoundsInter2AngSeg(__pyx_self, __pyx_v_Full, __pyx_v_Phi0, __pyx_v_Phi1, __pyx_v_DPhi0, __pyx_v_DPhi1);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_30_getBoundsInter2AngSeg(CYTHON_UNUSED PyObject *__pyx_self, PyBoolObject *__pyx_v_Full, double __pyx_v_Phi0, double __pyx_v_Phi1, double __pyx_v_DPhi0, double __pyx_v_DPhi1) {
  PyObject *__pyx_v_Bounds = NULL;
  int __pyx_v_Inter;
  PyObject *__pyx_v_Faces = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_getBoundsInter2AngSeg", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("tofu.geom._GG03._getBoundsInter2AngSeg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_Bounds);
  __Pyx_XDECREF(__pyx_v_Faces);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__188 = PyTuple_Pack(8, __pyx_n_s_Full, __pyx_n_s_Phi0, __pyx_n_s_Phi1, __pyx_n_s_DPhi0, __pyx_n_s_DPhi1, __pyx_n_s_Bounds, __pyx_n_s_Inter, __pyx_n_s_Faces); if (unlikely(!__pyx_tuple__188)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__188);
  __Pyx_GIVEREF(__pyx_tuple__188);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_31_getBoundsInter2AngSeg, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_getBoundsInter2AngSeg, __pyx_t_1) < 0) __PYX_ERR(0, 979, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__189 = (PyObject*)__Pyx_PyCode_New(5, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__188, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_getBoundsInter2AngSeg, 979, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__189)) __PYX_ERR(0, 979, __pyx_L1_error)
 0980:                            double DPhi0, double DPhi1):
 0981:     """ Return Inter=True if an intersection exist (all angles in radians
 0982:     in [-pi;pi])
 0983: 
 0984:     If Inter, return Bounds, a list of tuples indicating the segments defining
 0985:     the intersection, with
 0986:     The intervals are ordered from lowest index to highest index (with respect
 0987:     to [Phi0,Phi1])
 0988:     """
+0989:     if Full:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_Full)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 989, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+0990:         Bounds = [[DPhi0,DPhi1]] if DPhi0<=DPhi1 else [[-Cpi,DPhi1],[DPhi0,Cpi]]
    if (((__pyx_v_DPhi0 <= __pyx_v_DPhi1) != 0)) {
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
      __pyx_t_3 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
    } else {
      __pyx_t_4 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
      __pyx_t_5 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 990, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
      __pyx_t_3 = 0;
      __pyx_t_6 = 0;
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_v_Bounds = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+0991:         Inter = True
    __pyx_v_Inter = 1;
+0992:         Faces = [None, None]
    __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 992, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyList_SET_ITEM(__pyx_t_2, 0, Py_None);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyList_SET_ITEM(__pyx_t_2, 1, Py_None);
    __pyx_v_Faces = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
 0993: 
 0994:     else:
+0995:         Inter, Bounds, Faces = False, None, [False,False]
  /*else*/ {
    __pyx_t_1 = 0;
    __pyx_t_2 = Py_None;
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyList_SET_ITEM(__pyx_t_4, 0, Py_False);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyList_SET_ITEM(__pyx_t_4, 1, Py_False);
    __pyx_v_Inter = __pyx_t_1;
    __pyx_v_Bounds = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_v_Faces = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;
+0996:         if Phi0<=Phi1:
    __pyx_t_1 = ((__pyx_v_Phi0 <= __pyx_v_Phi1) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+0997:             if DPhi0<=DPhi1:
      __pyx_t_1 = ((__pyx_v_DPhi0 <= __pyx_v_DPhi1) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L5;
      }
+0998:                 if DPhi0<=Phi1 and DPhi1>=Phi0:
        __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L7_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
        __pyx_t_1 = __pyx_t_7;
        __pyx_L7_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
        }
+0999:                     Inter = True
          __pyx_v_Inter = 1;
+1000:                     Bounds = [[None,None]]
          __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_4, 0, Py_None);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_4, 1, Py_None);
          __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;
+1001:                     Bounds[0][0] = Phi0 if DPhi0<=Phi0 else DPhi0
          if (((__pyx_v_DPhi0 <= __pyx_v_Phi0) != 0)) {
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1001, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = __pyx_t_4;
            __pyx_t_4 = 0;
          } else {
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1001, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = __pyx_t_4;
            __pyx_t_4 = 0;
          }
          if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1001, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1002:                     Bounds[0][1] = Phi1 if DPhi1>=Phi1 else DPhi1
          if (((__pyx_v_DPhi1 >= __pyx_v_Phi1) != 0)) {
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1002, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = __pyx_t_4;
            __pyx_t_4 = 0;
          } else {
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1002, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = __pyx_t_4;
            __pyx_t_4 = 0;
          }
          if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 1, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1002, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1003:                     Faces[0] = DPhi0<=Phi0
          __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_DPhi0 <= __pyx_v_Phi0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1003, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 0, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1003, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1004:                     Faces[1] = DPhi1>=Phi1
          __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_DPhi1 >= __pyx_v_Phi1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1004, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 1, __pyx_t_2, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1004, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1005:             else:
+1006:                 if DPhi0<=Phi1 or DPhi1>=Phi0:
      /*else*/ {
        __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
        if (!__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L10_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
        __pyx_t_1 = __pyx_t_7;
        __pyx_L10_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
        }
      }
      __pyx_L5:;
+1007:                     Inter = True
          __pyx_v_Inter = 1;
+1008:                     if DPhi0<=Phi1 and DPhi1>=Phi0:
          __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_1 = __pyx_t_7;
            goto __pyx_L13_bool_binop_done;
          }
          __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
          __pyx_t_1 = __pyx_t_7;
          __pyx_L13_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L12;
          }
+1009:                         Bounds = [[Phi0,DPhi1],[DPhi0,Phi1]]
            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
            __pyx_t_2 = 0;
            __pyx_t_4 = 0;
            __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_4);
            PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_2);
            PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
            __pyx_t_4 = 0;
            __pyx_t_2 = 0;
            __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_6);
            PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_3);
            PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
            __pyx_t_6 = 0;
            __pyx_t_3 = 0;
            __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;
+1010:                         Faces = [True,True]
            __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1010, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(Py_True);
            __Pyx_GIVEREF(Py_True);
            PyList_SET_ITEM(__pyx_t_2, 0, Py_True);
            __Pyx_INCREF(Py_True);
            __Pyx_GIVEREF(Py_True);
            PyList_SET_ITEM(__pyx_t_2, 1, Py_True);
            __Pyx_DECREF_SET(__pyx_v_Faces, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;
 1011:                     else:
+1012:                         Bounds = [[None,None]]
          /*else*/ {
            __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1012, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            PyList_SET_ITEM(__pyx_t_2, 0, Py_None);
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            PyList_SET_ITEM(__pyx_t_2, 1, Py_None);
            __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1012, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_2);
            PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
            __pyx_t_2 = 0;
            __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_3));
            __pyx_t_3 = 0;
+1013:                         if DPhi0<=Phi1:
            __pyx_t_1 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
            if (__pyx_t_1) {
/* … */
              goto __pyx_L15;
            }
+1014:                             Bounds[0][0] = Phi0 if DPhi0<=Phi0 else DPhi0
              if (((__pyx_v_DPhi0 <= __pyx_v_Phi0) != 0)) {
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_3 = __pyx_t_2;
                __pyx_t_2 = 0;
              } else {
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_3 = __pyx_t_2;
                __pyx_t_2 = 0;
              }
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1014, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1015:                             Bounds[0][1] = Phi1
              __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1015, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 1, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1015, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1016:                             Faces[0] = DPhi0<=Phi0
              __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_DPhi0 <= __pyx_v_Phi0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1016, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 0, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1016, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1017:                             Faces[1] = True
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 1, Py_True, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1017, __pyx_L1_error)
 1018:                         else:
+1019:                             Bounds[0][0] = Phi0
            /*else*/ {
              __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1019, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1019, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1020:                             Bounds[0][1] = Phi1 if DPhi1>=Phi1 else DPhi1
              if (((__pyx_v_DPhi1 >= __pyx_v_Phi1) != 0)) {
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_3 = __pyx_t_2;
                __pyx_t_2 = 0;
              } else {
                __pyx_t_2 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_2);
                __pyx_t_3 = __pyx_t_2;
                __pyx_t_2 = 0;
              }
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 1, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1020, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1021:                             Faces[0] = True
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 0, Py_True, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1021, __pyx_L1_error)
+1022:                             Faces[1] = DPhi1>=Phi1
              __pyx_t_3 = __Pyx_PyBool_FromLong((__pyx_v_DPhi1 >= __pyx_v_Phi1)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1022, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_3);
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 1, __pyx_t_3, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1022, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            }
            __pyx_L15:;
          }
          __pyx_L12:;
 1023:         else:
+1024:             if DPhi0<=DPhi1:
    /*else*/ {
      __pyx_t_1 = ((__pyx_v_DPhi0 <= __pyx_v_DPhi1) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L16;
      }
+1025:                 if DPhi0<=Phi1 or DPhi1>=Phi0:
        __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
        if (!__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L18_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
        __pyx_t_1 = __pyx_t_7;
        __pyx_L18_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
        }
+1026:                     Inter = True
          __pyx_v_Inter = 1;
+1027:                     if DPhi0<=Phi1 and DPhi1>=Phi0:
          __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_1 = __pyx_t_7;
            goto __pyx_L21_bool_binop_done;
          }
          __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
          __pyx_t_1 = __pyx_t_7;
          __pyx_L21_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L20;
          }
+1028:                         Bounds = [[Phi0,DPhi1],[DPhi0,Phi1]]
            __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_3);
            PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_2);
            PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
            __pyx_t_3 = 0;
            __pyx_t_2 = 0;
            __pyx_t_2 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_2);
            PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
            __pyx_t_2 = 0;
            __pyx_t_3 = 0;
            __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_6);
            PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_4);
            PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
            __pyx_t_6 = 0;
            __pyx_t_4 = 0;
            __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_3));
            __pyx_t_3 = 0;
+1029:                         Faces = [True,True]
            __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1029, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_INCREF(Py_True);
            __Pyx_GIVEREF(Py_True);
            PyList_SET_ITEM(__pyx_t_3, 0, Py_True);
            __Pyx_INCREF(Py_True);
            __Pyx_GIVEREF(Py_True);
            PyList_SET_ITEM(__pyx_t_3, 1, Py_True);
            __Pyx_DECREF_SET(__pyx_v_Faces, ((PyObject*)__pyx_t_3));
            __pyx_t_3 = 0;
 1030:                     else:
+1031:                         Bounds = [[None,None]]
          /*else*/ {
            __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1031, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            PyList_SET_ITEM(__pyx_t_3, 0, Py_None);
            __Pyx_INCREF(Py_None);
            __Pyx_GIVEREF(Py_None);
            PyList_SET_ITEM(__pyx_t_3, 1, Py_None);
            __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1031, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_3);
            PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
            __pyx_t_3 = 0;
            __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_4));
            __pyx_t_4 = 0;
+1032:                         if DPhi0<=Phi1:
            __pyx_t_1 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
            if (__pyx_t_1) {
/* … */
              goto __pyx_L23;
            }
+1033:                             Bounds[0][0] = DPhi0
              __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1033, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1033, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1034:                             Bounds[0][1] = Phi1 if DPhi1>=Phi1 else DPhi1
              if (((__pyx_v_DPhi1 >= __pyx_v_Phi1) != 0)) {
                __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1034, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_4 = __pyx_t_3;
                __pyx_t_3 = 0;
              } else {
                __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1034, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_4 = __pyx_t_3;
                __pyx_t_3 = 0;
              }
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 1, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1034, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1035:                             Faces[1] = DPhi1>=Phi1
              __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_DPhi1 >= __pyx_v_Phi1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1035, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 1, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1035, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1036:                         else:
+1037:                             Bounds[0][0] = Phi0 if DPhi0<=Phi0 else DPhi0
            /*else*/ {
              if (((__pyx_v_DPhi0 <= __pyx_v_Phi0) != 0)) {
                __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1037, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_4 = __pyx_t_3;
                __pyx_t_3 = 0;
              } else {
                __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1037, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_3);
                __pyx_t_4 = __pyx_t_3;
                __pyx_t_3 = 0;
              }
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1037, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1038:                             Bounds[0][1] = DPhi1
              __pyx_t_4 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1038, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 1, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1038, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1039:                             Faces[0] = DPhi0<=Phi0
              __pyx_t_4 = __Pyx_PyBool_FromLong((__pyx_v_DPhi0 <= __pyx_v_Phi0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1039, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_4);
              if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 0, __pyx_t_4, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1039, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
            }
            __pyx_L23:;
          }
          __pyx_L20:;
 1040:             else:
+1041:                 Inter = True
      /*else*/ {
        __pyx_v_Inter = 1;
+1042:                 if DPhi0>=Phi0 and DPhi1>=Phi0:
        __pyx_t_7 = ((__pyx_v_DPhi0 >= __pyx_v_Phi0) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L25_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_DPhi1 >= __pyx_v_Phi0) != 0);
        __pyx_t_1 = __pyx_t_7;
        __pyx_L25_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
          goto __pyx_L24;
        }
+1043:                     Bounds = [[Phi0,DPhi1],[DPhi0,Cpi],[-Cpi,Phi1]]
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
          __pyx_t_4 = 0;
          __pyx_t_3 = 0;
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_4 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
          __pyx_t_3 = 0;
          __pyx_t_4 = 0;
          __pyx_t_4 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
          __pyx_t_4 = 0;
          __pyx_t_3 = 0;
          __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_5);
          __pyx_t_6 = 0;
          __pyx_t_2 = 0;
          __pyx_t_5 = 0;
          __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+1044:                     Faces = [True,True]
          __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1044, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_INCREF(Py_True);
          __Pyx_GIVEREF(Py_True);
          PyList_SET_ITEM(__pyx_t_3, 0, Py_True);
          __Pyx_INCREF(Py_True);
          __Pyx_GIVEREF(Py_True);
          PyList_SET_ITEM(__pyx_t_3, 1, Py_True);
          __Pyx_DECREF_SET(__pyx_v_Faces, ((PyObject*)__pyx_t_3));
          __pyx_t_3 = 0;
+1045:                 elif DPhi0<=Phi1 and DPhi1<=Phi1:
        __pyx_t_7 = ((__pyx_v_DPhi0 <= __pyx_v_Phi1) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L27_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_DPhi1 <= __pyx_v_Phi1) != 0);
        __pyx_t_1 = __pyx_t_7;
        __pyx_L27_bool_binop_done:;
        if (__pyx_t_1) {
/* … */
          goto __pyx_L24;
        }
+1046:                     Bounds = [[Phi0,Cpi],[-Cpi,DPhi1],[DPhi0,Phi1]]
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
          __pyx_t_3 = 0;
          __pyx_t_5 = 0;
          __pyx_t_5 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
          __pyx_t_5 = 0;
          __pyx_t_3 = 0;
          __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_5 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_3);
          PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
          __pyx_t_3 = 0;
          __pyx_t_5 = 0;
          __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1046, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_2);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
          __pyx_t_2 = 0;
          __pyx_t_6 = 0;
          __pyx_t_4 = 0;
          __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;
+1047:                     Faces = [True,True]
          __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1047, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(Py_True);
          __Pyx_GIVEREF(Py_True);
          PyList_SET_ITEM(__pyx_t_5, 0, Py_True);
          __Pyx_INCREF(Py_True);
          __Pyx_GIVEREF(Py_True);
          PyList_SET_ITEM(__pyx_t_5, 1, Py_True);
          __Pyx_DECREF_SET(__pyx_v_Faces, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;
 1048:                 else:
+1049:                     Bounds = [[None,Cpi],[-Cpi,None]]
        /*else*/ {
          __pyx_t_5 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1049, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1049, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_4, 0, Py_None);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_t_5 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1049, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_5);
          PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_6, 1, Py_None);
          __pyx_t_5 = 0;
          __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1049, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
          __pyx_t_4 = 0;
          __pyx_t_6 = 0;
          __Pyx_DECREF_SET(__pyx_v_Bounds, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;
+1050:                     Bounds[0][0] = Phi0 if DPhi0<=Phi0 else DPhi0
          if (((__pyx_v_DPhi0 <= __pyx_v_Phi0) != 0)) {
            __pyx_t_6 = PyFloat_FromDouble(__pyx_v_Phi0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = __pyx_t_6;
            __pyx_t_6 = 0;
          } else {
            __pyx_t_6 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = __pyx_t_6;
            __pyx_t_6 = 0;
          }
          if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 0), 0, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1050, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1051:                     Bounds[1][1] = Phi1 if DPhi1>=Phi1 else DPhi1
          if (((__pyx_v_DPhi1 >= __pyx_v_Phi1) != 0)) {
            __pyx_t_6 = PyFloat_FromDouble(__pyx_v_Phi1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1051, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = __pyx_t_6;
            __pyx_t_6 = 0;
          } else {
            __pyx_t_6 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1051, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_5 = __pyx_t_6;
            __pyx_t_6 = 0;
          }
          if (unlikely(__Pyx_SetItemInt(PyList_GET_ITEM(__pyx_v_Bounds, 1), 1, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1051, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1052:                     Faces[0] = DPhi0<=Phi0
          __pyx_t_5 = __Pyx_PyBool_FromLong((__pyx_v_DPhi0 <= __pyx_v_Phi0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 0, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1052, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1053:                     Faces[1] = DPhi1>=Phi1
          __pyx_t_5 = __Pyx_PyBool_FromLong((__pyx_v_DPhi1 >= __pyx_v_Phi1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Faces, 1, __pyx_t_5, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(0, 1053, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        }
        __pyx_L24:;
      }
      __pyx_L16:;
    }
    __pyx_L4:;
  }
  __pyx_L3:;
+1054:     return Inter, Bounds, Faces
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_Inter); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_INCREF(__pyx_v_Bounds);
  __Pyx_GIVEREF(__pyx_v_Bounds);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_Bounds);
  __Pyx_INCREF(__pyx_v_Faces);
  __Pyx_GIVEREF(__pyx_v_Faces);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_Faces);
  __pyx_t_5 = 0;
  __pyx_r = __pyx_t_6;
  __pyx_t_6 = 0;
  goto __pyx_L0;
 1055: 
 1056: 
 1057: 
 1058: 
 1059: @cython.cdivision(True)
 1060: @cython.wraparound(False)
 1061: @cython.boundscheck(False)
+1062: def _Ves_Smesh_Tor_SubFromD_cython(double dL, double dRPhi,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_33_Ves_Smesh_Tor_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_32_Ves_Smesh_Tor_SubFromD_cython[] = " Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi)\n    for the desired resolution (dR,dZ,dRphi)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_33_Ves_Smesh_Tor_SubFromD_cython = {"_Ves_Smesh_Tor_SubFromD_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_33_Ves_Smesh_Tor_SubFromD_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_32_Ves_Smesh_Tor_SubFromD_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_33_Ves_Smesh_Tor_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dL;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_DR = 0;
  PyObject *__pyx_v_DZ = 0;
  PyObject *__pyx_v_DPhi = 0;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_PhiMinMax = 0;
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Tor_SubFromD_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dL,&__pyx_n_s_dRPhi,&__pyx_n_s_VPoly,&__pyx_n_s_DR,&__pyx_n_s_DZ,&__pyx_n_s_DPhi,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_PhiMinMax,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_32_Ves_Smesh_Tor_SubFromD_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dL, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_VPoly, PyObject *__pyx_v_DR, PyObject *__pyx_v_DZ, PyObject *__pyx_v_DPhi, double __pyx_v_DIn, PyObject *__pyx_v_VIn, PyObject *__pyx_v_PhiMinMax, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_dPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_DPhi0;
  double __pyx_v_DPhi1;
  CYTHON_UNUSED double __pyx_v_DDPhi;
  double __pyx_v_DPhiMinMax;
  double __pyx_v_abs0;
  double __pyx_v_abs1;
  double __pyx_v_phi;
  double __pyx_v_indiijj;
  __Pyx_memviewslice __pyx_v_Phin = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_Indin = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_NR0;
  int __pyx_v_nRPhi0;
  int __pyx_v_indR0ii;
  int __pyx_v_ii;
  int __pyx_v_jj0;
  int __pyx_v_jj;
  int __pyx_v_nPhi0;
  int __pyx_v_nPhi1;
  int __pyx_v_NP;
  CYTHON_UNUSED int __pyx_v_NRPhi_int;
  int __pyx_v_Rratio;
  int __pyx_v_Ln;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_indI = 0;
  PyArrayObject *__pyx_v_PtsCross = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_R0 = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_dRPhir = 0;
  PyArrayObject *__pyx_v_iii = 0;
  PyArrayObject *__pyx_v_indL = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyArrayObject *__pyx_v_indok = 0;
  int __pyx_v_Full;
  PyObject *__pyx_v_Inter = NULL;
  PyObject *__pyx_v_Bounds = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_Faces = NULL;
  PyObject *__pyx_v_BC = NULL;
  Py_ssize_t __pyx_v_nBounds;
  PyObject *__pyx_v_indin = NULL;
  CYTHON_UNUSED long __pyx_v_NPhimax;
  PyObject *__pyx_v_indBounds = NULL;
  Py_ssize_t __pyx_v_kk;
  PyObject *__pyx_v_kkb = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsCross;
  __Pyx_Buffer __pyx_pybuffer_PtsCross;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_R0;
  __Pyx_Buffer __pyx_pybuffer_R0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dRPhir;
  __Pyx_Buffer __pyx_pybuffer_dRPhir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_iii;
  __Pyx_Buffer __pyx_pybuffer_iii;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indI;
  __Pyx_Buffer __pyx_pybuffer_indI;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indL;
  __Pyx_Buffer __pyx_pybuffer_indL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indok;
  __Pyx_Buffer __pyx_pybuffer_indok;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Tor_SubFromD_cython", 0);
  __Pyx_INCREF(__pyx_v_PhiMinMax);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_indI.pybuffer.buf = NULL;
  __pyx_pybuffer_indI.refcount = 0;
  __pyx_pybuffernd_indI.data = NULL;
  __pyx_pybuffernd_indI.rcbuffer = &__pyx_pybuffer_indI;
  __pyx_pybuffer_PtsCross.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsCross.refcount = 0;
  __pyx_pybuffernd_PtsCross.data = NULL;
  __pyx_pybuffernd_PtsCross.rcbuffer = &__pyx_pybuffer_PtsCross;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_R0.pybuffer.buf = NULL;
  __pyx_pybuffer_R0.refcount = 0;
  __pyx_pybuffernd_R0.data = NULL;
  __pyx_pybuffernd_R0.rcbuffer = &__pyx_pybuffer_R0;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_dRPhir.pybuffer.buf = NULL;
  __pyx_pybuffer_dRPhir.refcount = 0;
  __pyx_pybuffernd_dRPhir.data = NULL;
  __pyx_pybuffernd_dRPhir.rcbuffer = &__pyx_pybuffer_dRPhir;
  __pyx_pybuffer_iii.pybuffer.buf = NULL;
  __pyx_pybuffer_iii.refcount = 0;
  __pyx_pybuffernd_iii.data = NULL;
  __pyx_pybuffernd_iii.rcbuffer = &__pyx_pybuffer_iii;
  __pyx_pybuffer_indL.pybuffer.buf = NULL;
  __pyx_pybuffer_indL.refcount = 0;
  __pyx_pybuffernd_indL.data = NULL;
  __pyx_pybuffernd_indL.rcbuffer = &__pyx_pybuffer_indL;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
  __pyx_pybuffer_indok.pybuffer.buf = NULL;
  __pyx_pybuffer_indok.refcount = 0;
  __pyx_pybuffernd_indok.data = NULL;
  __pyx_pybuffernd_indok.rcbuffer = &__pyx_pybuffer_indok;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indok.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Tor_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indok.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_dPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Phin, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Indin, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_indI);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsCross);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_R0);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_dRPhir);
  __Pyx_XDECREF((PyObject *)__pyx_v_iii);
  __Pyx_XDECREF((PyObject *)__pyx_v_indL);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF((PyObject *)__pyx_v_indok);
  __Pyx_XDECREF(__pyx_v_Inter);
  __Pyx_XDECREF(__pyx_v_Bounds);
  __Pyx_XDECREF(__pyx_v_Faces);
  __Pyx_XDECREF(__pyx_v_BC);
  __Pyx_XDECREF(__pyx_v_indin);
  __Pyx_XDECREF(__pyx_v_indBounds);
  __Pyx_XDECREF(__pyx_v_kkb);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XDECREF(__pyx_v_PhiMinMax);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__190 = PyTuple_Pack(74, __pyx_n_s_dL, __pyx_n_s_dRPhi, __pyx_n_s_VPoly, __pyx_n_s_DR, __pyx_n_s_DZ, __pyx_n_s_DPhi, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_PhiMinMax, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_R, __pyx_n_s_Z, __pyx_n_s_dPhir, __pyx_n_s_NRPhi, __pyx_n_s_dRr0, __pyx_n_s_dRr, __pyx_n_s_dZr, __pyx_n_s_DPhi0, __pyx_n_s_DPhi1, __pyx_n_s_DDPhi, __pyx_n_s_DPhiMinMax, __pyx_n_s_abs0, __pyx_n_s_abs1, __pyx_n_s_phi, __pyx_n_s_indiijj, __pyx_n_s_indR0, __pyx_n_s_indR, __pyx_n_s_indZ, __pyx_n_s_Phin, __pyx_n_s_NRPhi0, __pyx_n_s_Indin, __pyx_n_s_NR0, __pyx_n_s_NR, __pyx_n_s_NZ, __pyx_n_s_Rn, __pyx_n_s_Zn, __pyx_n_s_nRPhi0, __pyx_n_s_indR0ii, __pyx_n_s_ii, __pyx_n_s_jj0, __pyx_n_s_jj, __pyx_n_s_nPhi0, __pyx_n_s_nPhi1, __pyx_n_s_zz, __pyx_n_s_NP, __pyx_n_s_NRPhi_int, __pyx_n_s_Rratio, __pyx_n_s_Ln, __pyx_n_s_Pts, __pyx_n_s_indI, __pyx_n_s_PtsCross, __pyx_n_s_VPbis, __pyx_n_s_R0, __pyx_n_s_dS, __pyx_n_s_ind, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_dRPhir, __pyx_n_s_iii, __pyx_n_s_indL, __pyx_n_s_NL, __pyx_n_s_indok, __pyx_n_s_Full, __pyx_n_s_Inter, __pyx_n_s_Bounds, __pyx_n_s_Faces, __pyx_n_s_BC, __pyx_n_s_nBounds, __pyx_n_s_indin, __pyx_n_s_NPhimax, __pyx_n_s_indBounds, __pyx_n_s_kk, __pyx_n_s_kkb); if (unlikely(!__pyx_tuple__190)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__190);
  __Pyx_GIVEREF(__pyx_tuple__190);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_33_Ves_Smesh_Tor_SubFromD_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_Tor_SubFromD_cython, __pyx_t_1) < 0) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__191 = (PyObject*)__Pyx_PyCode_New(11, 0, 74, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__190, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_Tor_SubFromD_cython, 1062, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__191)) __PYX_ERR(0, 1062, __pyx_L1_error)
 1063:                                    double[:,::1] VPoly,
+1064:                                    DR=None, DZ=None, DPhi=None,
    values[3] = ((PyObject *)Py_None);
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
+1065:                                    double DIn=0., VIn=None, PhiMinMax=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromD_cython", 0, 3, 11, 1); __PYX_ERR(0, 1062, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromD_cython", 0, 3, 11, 2); __PYX_ERR(0, 1062, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DR);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DZ);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DPhi);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_PhiMinMax);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_Tor_SubFromD_cython") < 0)) __PYX_ERR(0, 1062, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1062, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1062, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1063, __pyx_L3_error)
    __pyx_v_DR = values[3];
    __pyx_v_DZ = values[4];
    __pyx_v_DPhi = values[5];
    if (values[6]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1065, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[7];
    __pyx_v_PhiMinMax = values[8];
    __pyx_v_Out = ((PyObject*)values[9]);
    if (values[10]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1066, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__48;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromD_cython", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1062, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Tor_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 1066, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_32_Ves_Smesh_Tor_SubFromD_cython(__pyx_self, __pyx_v_dL, __pyx_v_dRPhi, __pyx_v_VPoly, __pyx_v_DR, __pyx_v_DZ, __pyx_v_DPhi, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_PhiMinMax, __pyx_v_Out, __pyx_v_margin);
+1066:                                    str Out='(X,Y,Z)', double margin=_VSMALL):
  __pyx_k__48 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1067:     """ Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi)
 1068:     for the desired resolution (dR,dZ,dRphi)
 1069:     """
 1070:     cdef double[::1] R, Z, dPhir, NRPhi#, dPhi, NRZPhi_cum0, indPhi, phi
 1071:     cdef double dRr0, dRr, dZr, DPhi0, DPhi1, DDPhi, DPhiMinMax
 1072:     cdef double abs0, abs1, phi, indiijj
 1073:     cdef long[::1] indR0, indR, indZ, Phin, NRPhi0, Indin
+1074:     cdef int NR0, NR, NZ, Rn, Zn, nRPhi0, indR0ii, ii, jj0=0, jj, nPhi0, nPhi1
  __pyx_v_jj0 = 0;
 1075:     cdef int zz, NP, NRPhi_int, Rratio, Ln
 1076:     cdef np.ndarray[double,ndim=2] Pts, indI, PtsCross, VPbis
 1077:     cdef np.ndarray[double,ndim=1] R0, dS, ind, dLr, Rref, dRPhir, iii
 1078:     cdef np.ndarray[long,ndim=1] indL, NL, indok
 1079: 
 1080:     # Pre-format input
+1081:     if PhiMinMax is None:
  __pyx_t_1 = (__pyx_v_PhiMinMax == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+1082:         PhiMinMax = [-Cpi,Cpi]
    __pyx_t_3 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1082, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_PhiMinMax, __pyx_t_5);
    __pyx_t_5 = 0;
+1083:         DPhiMinMax = 2.*Cpi
    __pyx_v_DPhiMinMax = (2. * M_PI);
+1084:         Full = True
    __pyx_v_Full = 1;
 1085:     else:
+1086:         PhiMinMax = [Catan2(Csin(PhiMinMax[0]),Ccos(PhiMinMax[0])),
  /*else*/ {
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble(atan2(sin(__pyx_t_6), cos(__pyx_t_7))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
/* … */
    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1086, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_PhiMinMax, __pyx_t_3);
    __pyx_t_3 = 0;
+1087:                      Catan2(Csin(PhiMinMax[1]),Ccos(PhiMinMax[1]))]
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1087, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyFloat_FromDouble(atan2(sin(__pyx_t_7), cos(__pyx_t_6))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
+1088:         DPhiMinMax = PhiMinMax[1]-PhiMinMax[0] if PhiMinMax[1]>=PhiMinMax[0] \
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1088, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1088, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1088, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyNumber_Subtract(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1088, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1088, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = __pyx_t_7;
    } else {
+1089:           else 2.*Cpi + PhiMinMax[1] - PhiMinMax[0]
      __pyx_t_3 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyNumber_Subtract(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1089, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = __pyx_t_7;
    }
    __pyx_v_DPhiMinMax = __pyx_t_6;
+1090:         Full = False
    __pyx_v_Full = 0;
  }
  __pyx_L3:;
 1091: 
 1092:     # Get the limits if any (and make sure to replace them in the proper
 1093:     # quadrants)
+1094:     if DPhi is None:
  __pyx_t_2 = (__pyx_v_DPhi == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1095:         DPhi0, DPhi1 = PhiMinMax[0], PhiMinMax[1]
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1095, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1095, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_DPhi0 = __pyx_t_6;
    __pyx_v_DPhi1 = __pyx_t_7;
 1096:     else:
+1097:         DPhi0 = PhiMinMax[0] if DPhi[0] is None else Catan2(Csin(DPhi[0]),
  /*else*/ {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1097, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = (__pyx_t_3 == Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if ((__pyx_t_1 != 0)) {
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1097, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1097, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_7 = __pyx_t_6;
    } else {
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1097, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1097, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __pyx_t_7 = atan2(sin(__pyx_t_6), cos(__pyx_t_8));
    }
    __pyx_v_DPhi0 = __pyx_t_7;
+1098:                                                             Ccos(DPhi[0]))
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1098, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1098, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1099:         DPhi1 = PhiMinMax[1] if DPhi[1] is None else Catan2(Csin(DPhi[1]),
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = (__pyx_t_3 == Py_None);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if ((__pyx_t_1 != 0)) {
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1099, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_7 = __pyx_t_8;
    } else {
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1099, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __pyx_t_7 = atan2(sin(__pyx_t_8), cos(__pyx_t_6));
    }
    __pyx_v_DPhi1 = __pyx_t_7;
  }
  __pyx_L4:;
+1100:                                                             Ccos(DPhi[1]))
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1100, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1100, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1101:     DDPhi = DPhi1-DPhi0 if DPhi1>DPhi0 else 2.*Cpi+DPhi1-DPhi0
  if (((__pyx_v_DPhi1 > __pyx_v_DPhi0) != 0)) {
    __pyx_t_7 = (__pyx_v_DPhi1 - __pyx_v_DPhi0);
  } else {
    __pyx_t_7 = (((2. * M_PI) + __pyx_v_DPhi1) - __pyx_v_DPhi0);
  }
  __pyx_v_DDPhi = __pyx_t_7;
 1102: 
+1103:     Inter, Bounds, Faces = _getBoundsInter2AngSeg(Full, PhiMinMax[0],
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_getBoundsInter2AngSeg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_Full); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
/* … */
  __pyx_v_Inter = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_Bounds = __pyx_t_15;
  __pyx_t_15 = 0;
  __pyx_v_Faces = __pyx_t_12;
  __pyx_t_12 = 0;
+1104:                                                   PhiMinMax[1], DPhi0, DPhi1)
  __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyFloat_FromDouble(__pyx_v_DPhi0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyFloat_FromDouble(__pyx_v_DPhi1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = NULL;
  __pyx_t_14 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_14 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[6] = {__pyx_t_13, __pyx_t_5, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_14, 5+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[6] = {__pyx_t_13, __pyx_t_5, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_12};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_14, 5+__pyx_t_14); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(5+__pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_13) {
      __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_13); __pyx_t_13 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_14, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_14, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_15, 2+__pyx_t_14, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_15, 3+__pyx_t_14, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_15, 4+__pyx_t_14, __pyx_t_12);
    __pyx_t_5 = 0;
    __pyx_t_9 = 0;
    __pyx_t_10 = 0;
    __pyx_t_11 = 0;
    __pyx_t_12 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1103, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_12);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_15 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_11)->tp_iternext;
    index = 0; __pyx_t_4 = __pyx_t_16(__pyx_t_11); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    index = 1; __pyx_t_15 = __pyx_t_16(__pyx_t_11); if (unlikely(!__pyx_t_15)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_15);
    index = 2; __pyx_t_12 = __pyx_t_16(__pyx_t_11); if (unlikely(!__pyx_t_12)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_12);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_11), 3) < 0) __PYX_ERR(0, 1103, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1103, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
 1105: 
+1106:     if Inter:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Inter); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1106, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L7;
  }
 1107: 
+1108:         BC = list(Bounds)
    __pyx_t_3 = PySequence_List(__pyx_v_Bounds); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_BC = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+1109:         nBounds = len(Bounds)
    __pyx_t_17 = PyObject_Length(__pyx_v_Bounds); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1109, __pyx_L1_error)
    __pyx_v_nBounds = __pyx_t_17;
+1110:         for ii in range(0,nBounds):
    __pyx_t_17 = __pyx_v_nBounds;
    __pyx_t_18 = __pyx_t_17;
    for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_18; __pyx_t_14+=1) {
      __pyx_v_ii = __pyx_t_14;
+1111:             if BC[ii][0]<PhiMinMax[0]:
      __pyx_t_3 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1111, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1111, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_15 = PyObject_RichCompare(__pyx_t_3, __pyx_t_12, Py_LT); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1111, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1111, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (__pyx_t_1) {
/* … */
      }
+1112:                 BC[ii][0] += 2.*Cpi
        __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii));
        __pyx_t_15 = PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii);
        __pyx_t_19 = 0;
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_15, __pyx_t_19, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1112, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_3 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1112, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1112, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_t_15, __pyx_t_19, __pyx_t_4, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 1112, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1113:             if BC[ii][1]<=PhiMinMax[0]:
      __pyx_t_15 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii), 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyObject_RichCompare(__pyx_t_15, __pyx_t_4, Py_LE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1113, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1113, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_1) {
/* … */
      }
    }
+1114:                 BC[ii][1] += 2.*Cpi
        __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii));
        __pyx_t_3 = PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii);
        __pyx_t_19 = 1;
        __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, __pyx_t_19, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_15 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __pyx_t_12 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_t_3, __pyx_t_19, __pyx_t_12, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 1114, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1115: 
 1116:         # Get the actual R and Z resolutions and mesh elements
+1117:         PtsCross, dLr, indL, \
    if (!(likely(((__pyx_t_15) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_15, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1117, __pyx_L1_error)
    __pyx_t_20 = ((PyArrayObject *)__pyx_t_15);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1117, __pyx_L1_error)
    }
    __pyx_t_20 = 0;
    __pyx_v_PtsCross = ((PyArrayObject *)__pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1117, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_dLr = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_v_indL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_indL.diminfo[0].strides = __pyx_pybuffernd_indL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indL.diminfo[0].shape = __pyx_pybuffernd_indL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1117, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_indL = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_11);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_20 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
    }
    __pyx_t_20 = 0;
    __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
+1118:           NL, Rref, VPbis = _Ves_Smesh_Cross(VPoly, dL, D1=None, D2=None,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Ves_Smesh_Cross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_15 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_15);
    __pyx_t_12 = 0;
    __pyx_t_15 = 0;
    __pyx_t_15 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_D1, Py_None) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_D2, Py_None) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
/* … */
    __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_12))) || (PyList_CheckExact(__pyx_t_12))) {
      PyObject* sequence = __pyx_t_12;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 6)) {
        if (size > 6) __Pyx_RaiseTooManyValuesError(6);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1117, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      } else {
        __pyx_t_15 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_10 = PyList_GET_ITEM(sequence, 4); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      }
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[6] = {&__pyx_t_15,&__pyx_t_4,&__pyx_t_3,&__pyx_t_11,&__pyx_t_10,&__pyx_t_9};
        for (i=0; i < 6; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1117, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[6] = {&__pyx_t_15,&__pyx_t_4,&__pyx_t_3,&__pyx_t_11,&__pyx_t_10,&__pyx_t_9};
      __pyx_t_5 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1117, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_16 = Py_TYPE(__pyx_t_5)->tp_iternext;
      for (index=0; index < 6; index++) {
        PyObject* item = __pyx_t_16(__pyx_t_5); if (unlikely(!item)) goto __pyx_L12_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_5), 6) < 0) __PYX_ERR(0, 1117, __pyx_L1_error)
      __pyx_t_16 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L13_unpacking_done;
      __pyx_L12_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_16 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1117, __pyx_L1_error)
      __pyx_L13_unpacking_done:;
    }
+1119:                                              margin=margin, DIn=DIn, VIn=VIn)
    __pyx_t_12 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_margin, __pyx_t_12) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_DIn, __pyx_t_12) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1118, __pyx_L1_error)
+1120:         R0 = np.copy(Rref)
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_copy); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_12 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_9, ((PyObject *)__pyx_v_Rref)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_Rref));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1120, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1120, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_12);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_v_R0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_R0.diminfo[0].strides = __pyx_pybuffernd_R0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_R0.diminfo[0].shape = __pyx_pybuffernd_R0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1120, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_R0 = ((PyArrayObject *)__pyx_t_12);
    __pyx_t_12 = 0;
+1121:         NR0 = R0.size
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_R0), __pyx_n_s_size); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_14 = __Pyx_PyInt_As_int(__pyx_t_12); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1121, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_v_NR0 = __pyx_t_14;
+1122:         indin = np.ones((PtsCross.shape[1],),dtype=bool)
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_PtsCross->dimensions[1])); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 1122, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_12, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_v_indin = __pyx_t_11;
    __pyx_t_11 = 0;
+1123:         if DR is not None:
    __pyx_t_1 = (__pyx_v_DR != Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
+1124:             indin = indin & (R0>=DR[0]) & (R0<=DR[1])
      __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_DR, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_9 = PyObject_RichCompare(((PyObject *)__pyx_v_R0), __pyx_t_11, Py_GE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyNumber_And(__pyx_v_indin, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_DR, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12 = PyObject_RichCompare(((PyObject *)__pyx_v_R0), __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_And(__pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1124, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_9);
      __pyx_t_9 = 0;
+1125:         if DZ is not None:
    __pyx_t_2 = (__pyx_v_DZ != Py_None);
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
/* … */
    }
+1126:             indin = indin & (PtsCross[1,:]>=DZ[0]) & (PtsCross[1,:]<=DZ[1])
      __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_DZ, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_t_12, Py_GE); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyNumber_And(__pyx_v_indin, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_DZ, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyObject_RichCompare(__pyx_t_11, __pyx_t_9, Py_LE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_And(__pyx_t_12, __pyx_t_10); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1126, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_9);
      __pyx_t_9 = 0;
+1127:         PtsCross, dLr, indL, Rref = PtsCross[:,indin], dLr[indin], \
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_indin);
    __Pyx_GIVEREF(__pyx_v_indin);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_indin);
    __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1127, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), __pyx_v_indin); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1127, __pyx_L1_error)
+1128:           indL[indin], Rref[indin]
    __pyx_t_12 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indL), __pyx_v_indin); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1128, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Rref), __pyx_v_indin); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1128, __pyx_L1_error)
    __pyx_t_20 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
    }
    __pyx_t_20 = 0;
    __Pyx_DECREF_SET(__pyx_v_PtsCross, ((PyArrayObject *)__pyx_t_10));
    __pyx_t_10 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __Pyx_DECREF_SET(__pyx_v_dLr, ((PyArrayObject *)__pyx_t_9));
    __pyx_t_9 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_12);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_v_indL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_indL.diminfo[0].strides = __pyx_pybuffernd_indL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indL.diminfo[0].shape = __pyx_pybuffernd_indL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __Pyx_DECREF_SET(__pyx_v_indL, ((PyArrayObject *)__pyx_t_12));
    __pyx_t_12 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_11);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1127, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __Pyx_DECREF_SET(__pyx_v_Rref, ((PyArrayObject *)__pyx_t_11));
    __pyx_t_11 = 0;
+1129:         Ln = indin.sum()
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_11 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1129, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_14 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1129, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_Ln = __pyx_t_14;
+1130:         Indin = indin.nonzero()[0]
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_11 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_GetItemInt(__pyx_t_11, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_12, PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 1130, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_v_Indin = __pyx_t_26;
    __pyx_t_26.memview = NULL;
    __pyx_t_26.data = NULL;
 1131: 
+1132:         dRPhir, dPhir = np.empty((Ln,)), np.empty((Ln,))
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_empty); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_12 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_11, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_empty); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_9, PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 1132, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_12);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1132, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_v_dPhir = __pyx_t_27;
    __pyx_t_27.memview = NULL;
    __pyx_t_27.data = NULL;
+1133:         Phin = np.zeros((Ln,),dtype=int)
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_zeros); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1133, __pyx_L1_error)
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 1133, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_Phin = __pyx_t_26;
    __pyx_t_26.memview = NULL;
    __pyx_t_26.data = NULL;
+1134:         NRPhi = np.empty((Ln,))
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_empty); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 1134, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_NRPhi = __pyx_t_27;
    __pyx_t_27.memview = NULL;
    __pyx_t_27.data = NULL;
+1135:         NRPhi0 = np.zeros((Ln,),dtype=int)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1135, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 1135, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_NRPhi0 = __pyx_t_26;
    __pyx_t_26.memview = NULL;
    __pyx_t_26.data = NULL;
+1136:         nRPhi0, indR0ii = 0, 0
    __pyx_t_14 = 0;
    __pyx_t_28 = 0;
    __pyx_v_nRPhi0 = __pyx_t_14;
    __pyx_v_indR0ii = __pyx_t_28;
+1137:         NP, NPhimax = 0, 0
    __pyx_t_28 = 0;
    __pyx_t_29 = 0;
    __pyx_v_NP = __pyx_t_28;
    __pyx_v_NPhimax = __pyx_t_29;
+1138:         Rratio = int(Cceil(np.max(Rref)/np.min(Rref)))
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_11 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, ((PyObject *)__pyx_v_Rref)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_Rref));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_min); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_9, ((PyObject *)__pyx_v_Rref)) : __Pyx_PyObject_CallOneArg(__pyx_t_12, ((PyObject *)__pyx_v_Rref));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1138, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_v_Rratio = ((int)ceil(__pyx_t_7));
+1139:         indBounds = np.empty((2,nBounds),dtype=int)
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_nBounds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_INCREF(__pyx_int_2);
    __Pyx_GIVEREF(__pyx_int_2);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_int_2);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1139, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_indBounds = __pyx_t_9;
    __pyx_t_9 = 0;
+1140:         for ii in range(0,Ln):
    __pyx_t_28 = __pyx_v_Ln;
    __pyx_t_14 = __pyx_t_28;
    for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_14; __pyx_t_30+=1) {
      __pyx_v_ii = __pyx_t_30;
 1141:             # Get the actual RPhi resolution and Phi mesh elements
 1142:             # (! depends on R!)
+1143:             NRPhi[ii] = Cceil(DPhiMinMax*Rref[ii]/dRPhi)
      __pyx_t_31 = __pyx_v_ii;
      __pyx_t_32 = __pyx_v_ii;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_32)) )) = ceil(((__pyx_v_DPhiMinMax * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Rref.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_Rref.diminfo[0].strides))) / __pyx_v_dRPhi));
+1144:             NRPhi_int = int(NRPhi[ii])
      __pyx_t_33 = __pyx_v_ii;
      __pyx_v_NRPhi_int = ((int)(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_33)) ))));
+1145:             dPhir[ii] = DPhiMinMax/NRPhi[ii]
      __pyx_t_34 = __pyx_v_ii;
      __pyx_t_35 = __pyx_v_ii;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_35)) )) = (__pyx_v_DPhiMinMax / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_NRPhi.data) + __pyx_t_34)) ))));
+1146:             dRPhir[ii] = dPhir[ii]*Rref[ii]
      __pyx_t_36 = __pyx_v_ii;
      __pyx_t_37 = __pyx_v_ii;
      __pyx_t_38 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_dRPhir.diminfo[0].strides) = ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_36)) ))) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Rref.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_Rref.diminfo[0].strides)));
 1147:             # Get index and cumulated indices from background
+1148:             for jj0 in range(indR0ii,NR0):
      __pyx_t_39 = __pyx_v_NR0;
      __pyx_t_40 = __pyx_t_39;
      for (__pyx_t_41 = __pyx_v_indR0ii; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
        __pyx_v_jj0 = __pyx_t_41;
+1149:                 if jj0==Indin[ii]:
        __pyx_t_42 = __pyx_v_ii;
        __pyx_t_1 = ((__pyx_v_jj0 == (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Indin.data) + __pyx_t_42)) )))) != 0);
        if (__pyx_t_1) {
/* … */
        }
+1150:                     indR0ii = jj0
          __pyx_v_indR0ii = __pyx_v_jj0;
+1151:                     break
          goto __pyx_L19_break;
 1152:                 else:
+1153:                     nRPhi0 += <long>Cceil(DPhiMinMax*R0[jj0]/dRPhi)
        /*else*/ {
          __pyx_t_43 = __pyx_v_jj0;
          __pyx_v_nRPhi0 = (__pyx_v_nRPhi0 + ((long)ceil(((__pyx_v_DPhiMinMax * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_R0.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_R0.diminfo[0].strides))) / __pyx_v_dRPhi))));
+1154:                     NRPhi0[ii] = nRPhi0
          __pyx_t_44 = __pyx_v_ii;
          *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_44)) )) = __pyx_v_nRPhi0;
        }
      }
      __pyx_L19_break:;
 1155:             # Get indices of phi
 1156:             # Get the extreme indices of the mesh elements that really need to
 1157:             # be created within those limits
+1158:             for kk in range(0,nBounds):
      __pyx_t_17 = __pyx_v_nBounds;
      __pyx_t_18 = __pyx_t_17;
      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
        __pyx_v_kk = __pyx_t_19;
+1159:                 abs0 = BC[kk][0]-PhiMinMax[0]
        __pyx_t_9 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_kk), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1159, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1159, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = PyNumber_Subtract(__pyx_t_9, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1159, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1159, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_v_abs0 = __pyx_t_7;
+1160:                 if abs0-dPhir[ii]*Cfloor(abs0/dPhir[ii])<margin*dPhir[ii]:
        __pyx_t_45 = __pyx_v_ii;
        __pyx_t_46 = __pyx_v_ii;
        __pyx_t_47 = __pyx_v_ii;
        __pyx_t_1 = (((__pyx_v_abs0 - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_45)) ))) * floor((__pyx_v_abs0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_46)) ))))))) < (__pyx_v_margin * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_47)) ))))) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L23;
        }
+1161:                     nPhi0 = int(Cround(abs0/dPhir[ii]))
          __pyx_t_48 = __pyx_v_ii;
          __pyx_v_nPhi0 = ((int)round((__pyx_v_abs0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_48)) ))))));
 1162:                 else:
+1163:                     nPhi0 = int(Cfloor(abs0/dPhir[ii]))
        /*else*/ {
          __pyx_t_49 = __pyx_v_ii;
          __pyx_v_nPhi0 = ((int)floor((__pyx_v_abs0 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_49)) ))))));
        }
        __pyx_L23:;
+1164:                 abs1 = BC[kk][1]-PhiMinMax[0]
        __pyx_t_12 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_kk), 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1164, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1164, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_9 = PyNumber_Subtract(__pyx_t_12, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1164, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1164, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_v_abs1 = __pyx_t_7;
+1165:                 if abs1-dPhir[ii]*Cfloor(abs1/dPhir[ii])<margin*dPhir[ii]:
        __pyx_t_50 = __pyx_v_ii;
        __pyx_t_51 = __pyx_v_ii;
        __pyx_t_52 = __pyx_v_ii;
        __pyx_t_1 = (((__pyx_v_abs1 - ((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_50)) ))) * floor((__pyx_v_abs1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_51)) ))))))) < (__pyx_v_margin * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_52)) ))))) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L24;
        }
+1166:                     nPhi1 = int(Cround(abs1/dPhir[ii])-1)
          __pyx_t_53 = __pyx_v_ii;
          __pyx_v_nPhi1 = ((int)(round((__pyx_v_abs1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_53)) ))))) - 1.0));
 1167:                 else:
+1168:                     nPhi1 = int(Cfloor(abs1/dPhir[ii]))
        /*else*/ {
          __pyx_t_54 = __pyx_v_ii;
          __pyx_v_nPhi1 = ((int)floor((__pyx_v_abs1 / (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_54)) ))))));
        }
        __pyx_L24:;
+1169:                 indBounds[0,kk] = nPhi0
        __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_nPhi0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = PyInt_FromSsize_t(__pyx_v_kk); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1169, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
        __pyx_t_11 = 0;
        if (unlikely(PyObject_SetItem(__pyx_v_indBounds, __pyx_t_12, __pyx_t_9) < 0)) __PYX_ERR(0, 1169, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1170:                 indBounds[1,kk] = nPhi1
        __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_nPhi1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1170, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_12 = PyInt_FromSsize_t(__pyx_v_kk); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1170, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1170, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12);
        __pyx_t_12 = 0;
        if (unlikely(PyObject_SetItem(__pyx_v_indBounds, __pyx_t_11, __pyx_t_9) < 0)) __PYX_ERR(0, 1170, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1171:                 Phin[ii] += nPhi1+1-nPhi0
        __pyx_t_55 = __pyx_v_ii;
        *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_55)) )) += ((__pyx_v_nPhi1 + 1) - __pyx_v_nPhi0);
      }
 1172: 
+1173:             if ii==0:
      __pyx_t_1 = ((__pyx_v_ii == 0) != 0);
      if (__pyx_t_1) {
/* … */
      }
+1174:                 indI = np.nan*np.ones((Ln,Phin[ii]*Rratio+1))
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_56 = __pyx_v_ii;
        __pyx_t_10 = __Pyx_PyInt_From_long((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_56)) ))) * __pyx_v_Rratio) + 1)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_10);
        __pyx_t_12 = 0;
        __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_10, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Multiply(__pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1174, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1174, __pyx_L1_error)
        __pyx_t_20 = ((PyArrayObject *)__pyx_t_3);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indI.rcbuffer->pybuffer);
          __pyx_t_39 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_39 < 0)) {
            PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indI.rcbuffer->pybuffer, (PyObject*)__pyx_v_indI, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            }
            __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
          }
          __pyx_pybuffernd_indI.diminfo[0].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indI.diminfo[0].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indI.diminfo[1].strides = __pyx_pybuffernd_indI.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indI.diminfo[1].shape = __pyx_pybuffernd_indI.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_39 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
        }
        __pyx_t_20 = 0;
        __Pyx_XDECREF_SET(__pyx_v_indI, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;
+1175:             jj = 0
      __pyx_v_jj = 0;
+1176:             for kk in range(0,nBounds):
      __pyx_t_17 = __pyx_v_nBounds;
      __pyx_t_18 = __pyx_t_17;
      for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
        __pyx_v_kk = __pyx_t_19;
+1177:                 for kkb in range(indBounds[0,kk],indBounds[1,kk]+1):
        __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_kk); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_indBounds, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_kk); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_indBounds, __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyInt_AddObjC(__pyx_t_9, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_11);
        __pyx_t_3 = 0;
        __pyx_t_11 = 0;
        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_9, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1177, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) {
          __pyx_t_9 = __pyx_t_11; __Pyx_INCREF(__pyx_t_9); __pyx_t_57 = 0;
          __pyx_t_58 = NULL;
        } else {
          __pyx_t_57 = -1; __pyx_t_9 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1177, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_58 = Py_TYPE(__pyx_t_9)->tp_iternext; if (unlikely(!__pyx_t_58)) __PYX_ERR(0, 1177, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        for (;;) {
          if (likely(!__pyx_t_58)) {
            if (likely(PyList_CheckExact(__pyx_t_9))) {
              if (__pyx_t_57 >= PyList_GET_SIZE(__pyx_t_9)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_9, __pyx_t_57); __Pyx_INCREF(__pyx_t_11); __pyx_t_57++; if (unlikely(0 < 0)) __PYX_ERR(0, 1177, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_9, __pyx_t_57); __pyx_t_57++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1177, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_57 >= PyTuple_GET_SIZE(__pyx_t_9)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_9, __pyx_t_57); __Pyx_INCREF(__pyx_t_11); __pyx_t_57++; if (unlikely(0 < 0)) __PYX_ERR(0, 1177, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_9, __pyx_t_57); __pyx_t_57++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1177, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_58(__pyx_t_9);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 1177, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_XDECREF_SET(__pyx_v_kkb, __pyx_t_11);
          __pyx_t_11 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
+1178:                     indI[ii,jj] = <double>( kkb )
          __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_v_kkb); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1178, __pyx_L1_error)
          __pyx_t_59 = __pyx_v_ii;
          __pyx_t_60 = __pyx_v_jj;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_indI.rcbuffer->pybuffer.buf, __pyx_t_59, __pyx_pybuffernd_indI.diminfo[0].strides, __pyx_t_60, __pyx_pybuffernd_indI.diminfo[1].strides) = ((double)__pyx_t_7);
+1179:                     jj += 1
          __pyx_v_jj = (__pyx_v_jj + 1);
+1180:             NP += Phin[ii]
      __pyx_t_61 = __pyx_v_ii;
      __pyx_v_NP = (__pyx_v_NP + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_Phin.data) + __pyx_t_61)) ))));
    }
 1181: 
 1182:         # Finish counting to get total number of points
+1183:         if jj0<=NR0-1:
    __pyx_t_1 = ((__pyx_v_jj0 <= (__pyx_v_NR0 - 1)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+1184:             for jj0 in range(indR0ii,NR0):
      __pyx_t_28 = __pyx_v_NR0;
      __pyx_t_14 = __pyx_t_28;
      for (__pyx_t_30 = __pyx_v_indR0ii; __pyx_t_30 < __pyx_t_14; __pyx_t_30+=1) {
        __pyx_v_jj0 = __pyx_t_30;
+1185:                 nRPhi0 += <long>Cceil(DPhiMinMax*R0[jj0]/dRPhi)
        __pyx_t_62 = __pyx_v_jj0;
        __pyx_v_nRPhi0 = (__pyx_v_nRPhi0 + ((long)ceil(((__pyx_v_DPhiMinMax * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_R0.rcbuffer->pybuffer.buf, __pyx_t_62, __pyx_pybuffernd_R0.diminfo[0].strides))) / __pyx_v_dRPhi))));
      }
 1186: 
 1187:         # Compute Pts, dV and ind
+1188:         Pts = np.nan*np.ones((3,NP))
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_nan); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_INCREF(__pyx_int_3);
    __Pyx_GIVEREF(__pyx_int_3);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_int_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_9 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Multiply(__pyx_t_11, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1188, __pyx_L1_error)
    __pyx_t_20 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1188, __pyx_L1_error)
    }
    __pyx_t_20 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
+1189:         ind = np.nan*np.ones((NP,))
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_nan); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_4 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Multiply(__pyx_t_9, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1189, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1189, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_ind = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
+1190:         dS = np.nan*np.ones((NP,))
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_NP); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1190, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1190, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1190, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
 1191:         # This triple loop is the longest part, it takes ~90% of the CPU time
+1192:         NP = 0
    __pyx_v_NP = 0;
+1193:         if Out.lower()=='(x,y,z)':
    __pyx_t_3 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1193, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L33;
    }
+1194:             for ii in range(0,Ln):
      __pyx_t_28 = __pyx_v_Ln;
      __pyx_t_14 = __pyx_t_28;
      for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_14; __pyx_t_30+=1) {
        __pyx_v_ii = __pyx_t_30;
 1195:                 # Some rare cases with doubles have to be eliminated:
+1196:                 iii = np.unique(indI[ii,~np.isnan(indI[ii,:])])
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_unique); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_isnan); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_slice__8);
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_12, function);
          }
        }
        __pyx_t_11 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_15, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_9);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_12 = PyNumber_Invert(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_12);
        __pyx_t_10 = 0;
        __pyx_t_12 = 0;
        __pyx_t_12 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_11, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_12);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1196, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1196, __pyx_L1_error)
        __pyx_t_24 = ((PyArrayObject *)__pyx_t_3);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
          __pyx_t_39 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_39 < 0)) {
            PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_v_iii, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
            }
            __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
          }
          __pyx_pybuffernd_iii.diminfo[0].strides = __pyx_pybuffernd_iii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iii.diminfo[0].shape = __pyx_pybuffernd_iii.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_39 < 0)) __PYX_ERR(0, 1196, __pyx_L1_error)
        }
        __pyx_t_24 = 0;
        __Pyx_XDECREF_SET(__pyx_v_iii, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;
+1197:                 for jj in range(0,len(iii)):
        __pyx_t_17 = PyObject_Length(((PyObject *)__pyx_v_iii)); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1197, __pyx_L1_error)
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_18; __pyx_t_39+=1) {
          __pyx_v_jj = __pyx_t_39;
+1198:                     indiijj = iii[jj]
          __pyx_t_63 = __pyx_v_jj;
          __pyx_v_indiijj = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_iii.rcbuffer->pybuffer.buf, __pyx_t_63, __pyx_pybuffernd_iii.diminfo[0].strides));
+1199:                     phi = PhiMinMax[0] + (0.5+indiijj)*dPhir[ii]
          __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_64 = __pyx_v_ii;
          __pyx_t_4 = PyFloat_FromDouble(((0.5 + __pyx_v_indiijj) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_64)) ))))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_12 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1199, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_v_phi = __pyx_t_7;
+1200:                     Pts[0,NP] = PtsCross[0,ii]*Ccos(phi)
          __pyx_t_65 = 0;
          __pyx_t_66 = __pyx_v_ii;
          __pyx_t_67 = 0;
          __pyx_t_68 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_68, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_65, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_66, __pyx_pybuffernd_PtsCross.diminfo[1].strides)) * cos(__pyx_v_phi));
+1201:                     Pts[1,NP] = PtsCross[0,ii]*Csin(phi)
          __pyx_t_69 = 0;
          __pyx_t_70 = __pyx_v_ii;
          __pyx_t_71 = 1;
          __pyx_t_72 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_71, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_72, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_PtsCross.diminfo[1].strides)) * sin(__pyx_v_phi));
+1202:                     Pts[2,NP] = PtsCross[1,ii]
          __pyx_t_73 = 1;
          __pyx_t_74 = __pyx_v_ii;
          __pyx_t_75 = 2;
          __pyx_t_76 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_75, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_76, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_73, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_74, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1203:                     ind[NP] = NRPhi0[ii] + indiijj
          __pyx_t_77 = __pyx_v_ii;
          __pyx_t_78 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ind.rcbuffer->pybuffer.buf, __pyx_t_78, __pyx_pybuffernd_ind.diminfo[0].strides) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_77)) ))) + __pyx_v_indiijj);
+1204:                     dS[NP] = dLr[ii]*dRPhir[ii]
          __pyx_t_79 = __pyx_v_ii;
          __pyx_t_80 = __pyx_v_ii;
          __pyx_t_81 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dS.rcbuffer->pybuffer.buf, __pyx_t_81, __pyx_pybuffernd_dS.diminfo[0].strides) = ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_79, __pyx_pybuffernd_dLr.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_80, __pyx_pybuffernd_dRPhir.diminfo[0].strides)));
+1205:                     NP += 1
          __pyx_v_NP = (__pyx_v_NP + 1);
        }
      }
 1206:         else:
+1207:             for ii in range(0,Ln):
    /*else*/ {
      __pyx_t_28 = __pyx_v_Ln;
      __pyx_t_14 = __pyx_t_28;
      for (__pyx_t_30 = 0; __pyx_t_30 < __pyx_t_14; __pyx_t_30+=1) {
        __pyx_v_ii = __pyx_t_30;
+1208:                 iii = np.unique(indI[ii,~np.isnan(indI[ii,:])])
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_unique); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_isnan); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_10);
        __Pyx_INCREF(__pyx_slice__8);
        __Pyx_GIVEREF(__pyx_slice__8);
        PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_slice__8);
        __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_15)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_11 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_15, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10);
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyNumber_Invert(__pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
        __pyx_t_4 = 0;
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indI), __pyx_t_11); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_11)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_12 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_11, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1208, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1208, __pyx_L1_error)
        __pyx_t_24 = ((PyArrayObject *)__pyx_t_12);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iii.rcbuffer->pybuffer);
          __pyx_t_39 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_39 < 0)) {
            PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iii.rcbuffer->pybuffer, (PyObject*)__pyx_v_iii, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
            }
            __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
          }
          __pyx_pybuffernd_iii.diminfo[0].strides = __pyx_pybuffernd_iii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iii.diminfo[0].shape = __pyx_pybuffernd_iii.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_39 < 0)) __PYX_ERR(0, 1208, __pyx_L1_error)
        }
        __pyx_t_24 = 0;
        __Pyx_XDECREF_SET(__pyx_v_iii, ((PyArrayObject *)__pyx_t_12));
        __pyx_t_12 = 0;
+1209:                 for jj in range(0,len(iii)):
        __pyx_t_17 = PyObject_Length(((PyObject *)__pyx_v_iii)); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1209, __pyx_L1_error)
        __pyx_t_18 = __pyx_t_17;
        for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_18; __pyx_t_39+=1) {
          __pyx_v_jj = __pyx_t_39;
+1210:                     indiijj = iii[jj]
          __pyx_t_82 = __pyx_v_jj;
          __pyx_v_indiijj = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_iii.rcbuffer->pybuffer.buf, __pyx_t_82, __pyx_pybuffernd_iii.diminfo[0].strides));
+1211:                     Pts[0,NP] = PtsCross[0,ii]
          __pyx_t_83 = 0;
          __pyx_t_84 = __pyx_v_ii;
          __pyx_t_85 = 0;
          __pyx_t_86 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_85, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_86, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_83, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_84, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1212:                     Pts[1,NP] = PtsCross[1,ii]
          __pyx_t_87 = 1;
          __pyx_t_88 = __pyx_v_ii;
          __pyx_t_89 = 1;
          __pyx_t_90 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_89, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_90, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_87, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_88, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1213:                     Pts[2,NP] = PhiMinMax[0] + (0.5+indiijj)*dPhir[ii]
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_91 = __pyx_v_ii;
          __pyx_t_3 = PyFloat_FromDouble(((0.5 + __pyx_v_indiijj) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_91)) ))))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_9 = PyNumber_Add(__pyx_t_12, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1213, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1213, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_92 = 2;
          __pyx_t_93 = __pyx_v_NP;
          *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_92, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_93, __pyx_pybuffernd_Pts.diminfo[1].strides) = __pyx_t_7;
+1214:                     ind[NP] = NRPhi0[ii] + indiijj
          __pyx_t_94 = __pyx_v_ii;
          __pyx_t_95 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ind.rcbuffer->pybuffer.buf, __pyx_t_95, __pyx_pybuffernd_ind.diminfo[0].strides) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_94)) ))) + __pyx_v_indiijj);
+1215:                     dS[NP] = dLr[ii]*dRPhir[ii]
          __pyx_t_96 = __pyx_v_ii;
          __pyx_t_97 = __pyx_v_ii;
          __pyx_t_98 = __pyx_v_NP;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dS.rcbuffer->pybuffer.buf, __pyx_t_98, __pyx_pybuffernd_dS.diminfo[0].strides) = ((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_96, __pyx_pybuffernd_dLr.diminfo[0].strides)) * (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_97, __pyx_pybuffernd_dRPhir.diminfo[0].strides)));
+1216:                     NP += 1
          __pyx_v_NP = (__pyx_v_NP + 1);
        }
      }
    }
    __pyx_L33:;
+1217:         indok = (~np.isnan(ind)).nonzero()[0]
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_isnan); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_3 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, ((PyObject *)__pyx_v_ind)) : __Pyx_PyObject_CallOneArg(__pyx_t_11, ((PyObject *)__pyx_v_ind));
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = PyNumber_Invert(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_11)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_11);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1217, __pyx_L1_error)
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indok.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indok.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indok.rcbuffer->pybuffer, (PyObject*)__pyx_v_indok, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_indok.diminfo[0].strides = __pyx_pybuffernd_indok.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indok.diminfo[0].shape = __pyx_pybuffernd_indok.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1217, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_indok = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
+1218:         ind = ind[indok]
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_indok)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1218, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1218, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
+1219:         dS = dS[indok]
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dS), ((PyObject *)__pyx_v_indok)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1219, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_28 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1219, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __Pyx_DECREF_SET(__pyx_v_dS, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
+1220:         if len(indok)==1:
    __pyx_t_17 = PyObject_Length(((PyObject *)__pyx_v_indok)); if (unlikely(__pyx_t_17 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1220, __pyx_L1_error)
    __pyx_t_1 = ((__pyx_t_17 == 1) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L42;
    }
+1221:             Pts = Pts[:,indok].reshape((3,1))
      __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_slice__8);
      __Pyx_INCREF(((PyObject *)__pyx_v_indok));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indok));
      PyTuple_SET_ITEM(__pyx_t_9, 1, ((PyObject *)__pyx_v_indok));
      __pyx_t_11 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_reshape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_3 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_11, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_tuple__49);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1221, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1221, __pyx_L1_error)
      __pyx_t_20 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_28 < 0)) {
          PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
          }
          __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1221, __pyx_L1_error)
      }
      __pyx_t_20 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
/* … */
  __pyx_tuple__49 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_1); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(0, 1221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__49);
  __Pyx_GIVEREF(__pyx_tuple__49);
 1222:         else:
+1223:             Pts = Pts[:,indok]
    /*else*/ {
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1223, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_slice__8);
      __Pyx_INCREF(((PyObject *)__pyx_v_indok));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indok));
      PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_indok));
      __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Pts), __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1223, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1223, __pyx_L1_error)
      __pyx_t_20 = ((PyArrayObject *)__pyx_t_9);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_28 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_28 < 0)) {
          PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
          }
          __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_28 < 0)) __PYX_ERR(0, 1223, __pyx_L1_error)
      }
      __pyx_t_20 = 0;
      __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_9));
      __pyx_t_9 = 0;
    }
    __pyx_L42:;
 1224:     else:
+1225:         Pts, dS, ind, NL, Rref, dRPhir, nRPhi0 = np.ones((3,0)), np.ones((0,)),\
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_9 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_3, __pyx_tuple__50) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_tuple__50);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
  __pyx_tuple__50 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_0); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__50);
  __Pyx_GIVEREF(__pyx_tuple__50);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_3, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1225, __pyx_L1_error)
  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(0, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__51);
  __Pyx_GIVEREF(__pyx_tuple__51);
+1226:           np.ones((0,)), np.nan*np.ones((VPoly.shape[1]-1,)),\
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_12 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ones); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyInt_FromSsize_t(((__pyx_v_VPoly.shape[1]) - 1)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
      }
    }
    __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_10, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = PyNumber_Multiply(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_15) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_15, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1226, __pyx_L1_error)
+1227:           np.ones((0,)), np.ones((0,)), 0
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_3, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1227, __pyx_L1_error)
    __pyx_t_28 = 0;
    __pyx_t_20 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_20, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_20 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_11);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_12);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_ind = ((PyArrayObject *)__pyx_t_12);
    __pyx_t_12 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_15);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_23, &__pyx_t_22, &__pyx_t_21);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_23); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_23, __pyx_t_22, __pyx_t_21);
        }
        __pyx_t_23 = __pyx_t_22 = __pyx_t_21 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
      __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_14 < 0)) {
        PyErr_Fetch(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_23);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_21, __pyx_t_22, __pyx_t_23);
        }
        __pyx_t_21 = __pyx_t_22 = __pyx_t_23 = 0;
      }
      __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1225, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_v_nRPhi0 = __pyx_t_28;
  }
  __pyx_L7:;
+1228:     return Pts, dS, ind.astype(int), NL, dLr, Rref, dRPhir, nRPhi0, VPbis
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ind), __pyx_n_s_astype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_15, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)(&PyInt_Type)));
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_nRPhi0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_15 = PyTuple_New(9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_15, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_15, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_15, 2, __pyx_t_5);
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_15, 3, ((PyObject *)__pyx_v_NL));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_15, 4, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_15, 5, ((PyObject *)__pyx_v_Rref));
  __Pyx_INCREF(((PyObject *)__pyx_v_dRPhir));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dRPhir));
  PyTuple_SET_ITEM(__pyx_t_15, 6, ((PyObject *)__pyx_v_dRPhir));
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_15, 7, __pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_15, 8, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_15;
  __pyx_t_15 = 0;
  goto __pyx_L0;
 1229: 
 1230: 
 1231: 
 1232: @cython.cdivision(True)
 1233: @cython.wraparound(False)
 1234: @cython.boundscheck(False)
+1235: def _Ves_Smesh_Tor_SubFromInd_cython(double dL, double dRPhi,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_35_Ves_Smesh_Tor_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_34_Ves_Smesh_Tor_SubFromInd_cython[] = " Return the desired submesh indicated by the (numerical) indices,\n    for the desired resolution (dR,dZ,dRphi)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_35_Ves_Smesh_Tor_SubFromInd_cython = {"_Ves_Smesh_Tor_SubFromInd_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_35_Ves_Smesh_Tor_SubFromInd_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_34_Ves_Smesh_Tor_SubFromInd_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_35_Ves_Smesh_Tor_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_dL;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ind = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_PhiMinMax = 0;
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Tor_SubFromInd_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dL,&__pyx_n_s_dRPhi,&__pyx_n_s_VPoly,&__pyx_n_s_ind,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_PhiMinMax,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_34_Ves_Smesh_Tor_SubFromInd_cython(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_dL, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_VPoly, __Pyx_memviewslice __pyx_v_ind, double __pyx_v_DIn, PyObject *__pyx_v_VIn, PyObject *__pyx_v_PhiMinMax, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  __Pyx_memviewslice __pyx_v_dRPhirRef = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_dPhir = { 0, 0, { 0 }, { 0 }, { 0 } };
  CYTHON_UNUSED __Pyx_memviewslice __pyx_v_indL = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi0 = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_NRPhi = { 0, 0, { 0 }, { 0 }, { 0 } };
  long __pyx_v_NP;
  long __pyx_v_Rratio;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_iiL;
  int __pyx_v_iiphi;
  int __pyx_v_Ln;
  CYTHON_UNUSED int __pyx_v_nn;
  CYTHON_UNUSED int __pyx_v_kk;
  int __pyx_v_nRPhi0;
  __Pyx_memviewslice __pyx_v_Phi = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_PtsCross = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_dRPhir = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyObject *__pyx_v_DPhiMinMax = NULL;
  PyObject *__pyx_v_dLrRef = NULL;
  PyObject *__pyx_v_RrefRef = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsCross;
  __Pyx_Buffer __pyx_pybuffer_PtsCross;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dRPhir;
  __Pyx_Buffer __pyx_pybuffer_dRPhir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Tor_SubFromInd_cython", 0);
  __Pyx_INCREF(__pyx_v_PhiMinMax);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_PtsCross.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsCross.refcount = 0;
  __pyx_pybuffernd_PtsCross.data = NULL;
  __pyx_pybuffernd_PtsCross.rcbuffer = &__pyx_pybuffer_PtsCross;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_dRPhir.pybuffer.buf = NULL;
  __pyx_pybuffer_dRPhir.refcount = 0;
  __pyx_pybuffernd_dRPhir.data = NULL;
  __pyx_pybuffernd_dRPhir.rcbuffer = &__pyx_pybuffer_dRPhir;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_23, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_24, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_35, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Tor_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_dRPhirRef, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dPhir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indL, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi0, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_NRPhi, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Phi, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsCross);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_dRPhir);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF(__pyx_v_DPhiMinMax);
  __Pyx_XDECREF(__pyx_v_dLrRef);
  __Pyx_XDECREF(__pyx_v_RrefRef);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ind, 1);
  __Pyx_XDECREF(__pyx_v_PhiMinMax);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__192 = PyTuple_Pack(42, __pyx_n_s_dL, __pyx_n_s_dRPhi, __pyx_n_s_VPoly, __pyx_n_s_ind, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_PhiMinMax, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_dRPhirRef, __pyx_n_s_dPhir, __pyx_n_s_indL, __pyx_n_s_NRPhi0, __pyx_n_s_NRPhi, __pyx_n_s_NR, __pyx_n_s_NZ, __pyx_n_s_Rn, __pyx_n_s_Zn, __pyx_n_s_NP, __pyx_n_s_Rratio, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_iiL, __pyx_n_s_iiphi, __pyx_n_s_Ln, __pyx_n_s_nn, __pyx_n_s_kk, __pyx_n_s_nRPhi0, __pyx_n_s_Phi, __pyx_n_s_Pts, __pyx_n_s_indI, __pyx_n_s_PtsCross, __pyx_n_s_VPbis, __pyx_n_s_R0, __pyx_n_s_dS, __pyx_n_s_dLr, __pyx_n_s_dRPhir, __pyx_n_s_Rref, __pyx_n_s_NL, __pyx_n_s_DPhiMinMax, __pyx_n_s_dLrRef, __pyx_n_s_RrefRef); if (unlikely(!__pyx_tuple__192)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__192);
  __Pyx_GIVEREF(__pyx_tuple__192);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_35_Ves_Smesh_Tor_SubFromInd_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_Tor_SubFromInd_cython, __pyx_t_1) < 0) __PYX_ERR(0, 1235, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__193 = (PyObject*)__Pyx_PyCode_New(9, 0, 42, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__192, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_Tor_SubFromInd_cython, 1235, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__193)) __PYX_ERR(0, 1235, __pyx_L1_error)
 1236:                                      double[:,::1] VPoly, long[::1] ind,
+1237:                                      double DIn=0., VIn=None, PhiMinMax=None,
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromInd_cython", 0, 4, 9, 1); __PYX_ERR(0, 1235, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromInd_cython", 0, 4, 9, 2); __PYX_ERR(0, 1235, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromInd_cython", 0, 4, 9, 3); __PYX_ERR(0, 1235, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_PhiMinMax);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_Tor_SubFromInd_cython") < 0)) __PYX_ERR(0, 1235, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1235, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1235, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1236, __pyx_L3_error)
    __pyx_v_ind = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ind.memview)) __PYX_ERR(0, 1236, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1237, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[5];
    __pyx_v_PhiMinMax = values[6];
    __pyx_v_Out = ((PyObject*)values[7]);
    if (values[8]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1238, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__52;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Tor_SubFromInd_cython", 0, 4, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1235, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Tor_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 1238, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_34_Ves_Smesh_Tor_SubFromInd_cython(__pyx_self, __pyx_v_dL, __pyx_v_dRPhi, __pyx_v_VPoly, __pyx_v_ind, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_PhiMinMax, __pyx_v_Out, __pyx_v_margin);
+1238:                                      str Out='(X,Y,Z)', double margin=_VSMALL):
  __pyx_k__52 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1239:     """ Return the desired submesh indicated by the (numerical) indices,
 1240:     for the desired resolution (dR,dZ,dRphi)
 1241:     """
 1242:     cdef double[::1] dRPhirRef, dPhir
 1243:     cdef long[::1] indL, NRPhi0, NRPhi
+1244:     cdef long NR, NZ, Rn, Zn, NP=len(ind), Rratio
  __pyx_t_1 = __Pyx_MemoryView_Len(__pyx_v_ind); 
  __pyx_v_NP = __pyx_t_1;
+1245:     cdef int ii=0, jj=0, iiL, iiphi, Ln, nn=0, kk=0, nRPhi0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
  __pyx_v_nn = 0;
  __pyx_v_kk = 0;
 1246:     cdef double[:,::1] Phi
+1247:     cdef np.ndarray[double,ndim=2] Pts=np.empty((3,NP)), indI, PtsCross, VPbis
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v_NP); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1247, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_Pts = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 1247, __pyx_L1_error)
    } else {__pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_Pts = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+1248:     cdef np.ndarray[double,ndim=1] R0, dS=np.empty((NP,)), dLr, dRPhir, Rref
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_v_NP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1248, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1248, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_dS = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_dS.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 1248, __pyx_L1_error)
    } else {__pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_dS = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 1249:     cdef np.ndarray[long,ndim=1] NL
 1250: 
 1251:     # Pre-format input
+1252:     if PhiMinMax is None:
  __pyx_t_8 = (__pyx_v_PhiMinMax == Py_None);
  __pyx_t_9 = (__pyx_t_8 != 0);
  if (__pyx_t_9) {
/* … */
    goto __pyx_L3;
  }
+1253:         PhiMinMax = [-Cpi,Cpi]
    __pyx_t_2 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
    __pyx_t_2 = 0;
    __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_PhiMinMax, __pyx_t_3);
    __pyx_t_3 = 0;
+1254:         DPhiMinMax = 2.*Cpi
    __pyx_t_3 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_DPhiMinMax = __pyx_t_3;
    __pyx_t_3 = 0;
 1255:     else:
+1256:         PhiMinMax = [Catan2(Csin(PhiMinMax[0]), Ccos(PhiMinMax[0])),
  /*else*/ {
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyFloat_FromDouble(atan2(sin(__pyx_t_10), cos(__pyx_t_11))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
    __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __Pyx_DECREF_SET(__pyx_v_PhiMinMax, __pyx_t_2);
    __pyx_t_2 = 0;
+1257:                      Catan2(Csin(PhiMinMax[1]), Ccos(PhiMinMax[1]))]
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1257, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1257, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble(atan2(sin(__pyx_t_11), cos(__pyx_t_10))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
+1258:         if PhiMinMax[1]>=PhiMinMax[0]:
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1258, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1258, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_9) {
/* … */
      goto __pyx_L4;
    }
+1259:             DPhiMinMax = PhiMinMax[1]-PhiMinMax[0]
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1259, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1259, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1259, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_DPhiMinMax = __pyx_t_2;
      __pyx_t_2 = 0;
 1260:         else:
+1261:             DPhiMinMax = 2.*Cpi + PhiMinMax[1] - PhiMinMax[0]
    /*else*/ {
      __pyx_t_2 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_DPhiMinMax = __pyx_t_2;
      __pyx_t_2 = 0;
    }
    __pyx_L4:;
  }
  __pyx_L3:;
 1262: 
 1263: 
 1264:     # Get the actual R and Z resolutions and mesh elements
+1265:     PtsCross, dLrRef, indL,\
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1265, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1265, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_12) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_12, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1265, __pyx_L1_error)
  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1265, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __pyx_t_19 = __pyx_t_20 = __pyx_t_21 = 0;
    }
    __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1265, __pyx_L1_error)
  }
  __pyx_t_6 = 0;
  __pyx_v_PtsCross = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_v_dLrRef = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_indL = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
  __pyx_t_22 = ((PyArrayObject *)__pyx_t_12);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_22, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_21, __pyx_t_20, __pyx_t_19);
      }
      __pyx_t_21 = __pyx_t_20 = __pyx_t_19 = 0;
    }
    __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1266, __pyx_L1_error)
  }
  __pyx_t_22 = 0;
  __pyx_v_NL = ((PyArrayObject *)__pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_v_RrefRef = __pyx_t_13;
  __pyx_t_13 = 0;
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_14);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __pyx_t_19 = __pyx_t_20 = __pyx_t_21 = 0;
    }
    __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1266, __pyx_L1_error)
  }
  __pyx_t_6 = 0;
  __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_14);
  __pyx_t_14 = 0;
+1266:       NL, RrefRef, VPbis = _Ves_Smesh_Cross(VPoly, dL, D1=None, D2=None,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_Smesh_Cross); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_D1, Py_None) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_D2, Py_None) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
    PyObject* sequence = __pyx_t_5;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 6)) {
      if (size > 6) __Pyx_RaiseTooManyValuesError(6);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1265, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 5); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_12 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 5); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_12);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_14);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[6] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_2,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14};
      for (i=0; i < 6; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[6] = {&__pyx_t_3,&__pyx_t_4,&__pyx_t_2,&__pyx_t_12,&__pyx_t_13,&__pyx_t_14};
    __pyx_t_15 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext;
    for (index=0; index < 6; index++) {
      PyObject* item = __pyx_t_16(__pyx_t_15); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 6) < 0) __PYX_ERR(0, 1265, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1265, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
+1267:                                             margin=margin, DIn=DIn, VIn=VIn)
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_DIn, __pyx_t_5) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1266, __pyx_L1_error)
+1268:     Ln = dLrRef.size
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_dLrRef, __pyx_n_s_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_18 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_18 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_Ln = __pyx_t_18;
 1269:     # Number of Phi per R
+1270:     dRPhirRef, dPhir, dRPhir = np.empty((Ln,)), np.empty((Ln,)), -np.ones((Ln,))
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_empty); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_14);
  __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_5 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_23 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_23.memview)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_empty); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_13);
  __pyx_t_13 = 0;
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
    }
  }
  __pyx_t_5 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_14);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_24 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_24.memview)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ones); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_5 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_12, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = PyNumber_Negative(__pyx_t_5); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1270, __pyx_L1_error)
  __pyx_v_dRPhirRef = __pyx_t_23;
  __pyx_t_23.memview = NULL;
  __pyx_t_23.data = NULL;
  __pyx_v_dPhir = __pyx_t_24;
  __pyx_t_24.memview = NULL;
  __pyx_t_24.data = NULL;
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_14);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_21, __pyx_t_20, __pyx_t_19);
      }
      __pyx_t_21 = __pyx_t_20 = __pyx_t_19 = 0;
    }
    __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1270, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_14);
  __pyx_t_14 = 0;
+1271:     dLr, Rref = -np.ones((Ln,)), -np.ones((Ln,))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_14 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_5, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_12);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = PyNumber_Negative(__pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_12);
  __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_14 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_12, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Negative(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1271, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_13);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __pyx_t_19 = __pyx_t_20 = __pyx_t_21 = 0;
    }
    __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1271, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_v_dLr = ((PyArrayObject *)__pyx_t_13);
  __pyx_t_13 = 0;
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __pyx_t_18 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_18 < 0)) {
      PyErr_Fetch(&__pyx_t_21, &__pyx_t_20, &__pyx_t_19);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_21, __pyx_t_20, __pyx_t_19);
      }
      __pyx_t_21 = __pyx_t_20 = __pyx_t_19 = 0;
    }
    __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_18 < 0)) __PYX_ERR(0, 1271, __pyx_L1_error)
  }
  __pyx_t_7 = 0;
  __pyx_v_Rref = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+1272:     NRPhi, NRPhi0 = np.empty((Ln,),dtype=int), np.empty((Ln,),dtype=int)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_14);
  __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1272, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1272, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_25 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(__pyx_t_13, PyBUF_WRITABLE); if (unlikely(!__pyx_t_25.memview)) __PYX_ERR(0, 1272, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_v_NRPhi = __pyx_t_17;
  __pyx_t_17.memview = NULL;
  __pyx_t_17.data = NULL;
  __pyx_v_NRPhi0 = __pyx_t_25;
  __pyx_t_25.memview = NULL;
  __pyx_t_25.data = NULL;
+1273:     Rratio = int(Cceil(np.max(RrefRef)/np.min(RrefRef)))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_v_RrefRef) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_RrefRef);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_min); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_5, __pyx_v_RrefRef) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_v_RrefRef);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyNumber_Divide(__pyx_t_13, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_14); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_v_Rratio = ((long)ceil(__pyx_t_10));
+1274:     for ii in range(0,Ln):
  __pyx_t_18 = __pyx_v_Ln;
  __pyx_t_26 = __pyx_t_18;
  for (__pyx_t_27 = 0; __pyx_t_27 < __pyx_t_26; __pyx_t_27+=1) {
    __pyx_v_ii = __pyx_t_27;
+1275:         NRPhi[ii] = <long>(Cceil(DPhiMinMax*RrefRef[ii]/dRPhi))
    __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_RrefRef, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_2 = PyNumber_Multiply(__pyx_v_DPhiMinMax, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = PyFloat_FromDouble(__pyx_v_dRPhi); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_13 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1275, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_13); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1275, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_28 = __pyx_v_ii;
    *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_28)) )) = ((long)ceil(__pyx_t_10));
+1276:         dRPhirRef[ii] = DPhiMinMax*RrefRef[ii]/<double>(NRPhi[ii])
    __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_RrefRef, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = PyNumber_Multiply(__pyx_v_DPhiMinMax, __pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_29 = __pyx_v_ii;
    __pyx_t_13 = PyFloat_FromDouble(((double)(*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_29)) ))))); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_14, __pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1276, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_30 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_30)) )) = __pyx_t_10;
+1277:         dPhir[ii] = DPhiMinMax/<double>(NRPhi[ii])
    __pyx_t_31 = __pyx_v_ii;
    __pyx_t_2 = PyFloat_FromDouble(((double)(*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_31)) ))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13 = __Pyx_PyNumber_Divide(__pyx_v_DPhiMinMax, __pyx_t_2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1277, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_13); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1277, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_32 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_32)) )) = __pyx_t_10;
+1278:         if ii==0:
    __pyx_t_9 = ((__pyx_v_ii == 0) != 0);
    if (__pyx_t_9) {
/* … */
      goto __pyx_L9;
    }
+1279:             NRPhi0[ii] = 0
      __pyx_t_33 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_33)) )) = 0;
+1280:             Phi = np.empty((Ln,NRPhi[ii]*Rratio+1))
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_34 = __pyx_v_ii;
      __pyx_t_5 = __Pyx_PyInt_From_long((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_34)) ))) * __pyx_v_Rratio) + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_5);
      __pyx_t_2 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_14);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_14, function);
        }
      }
      __pyx_t_13 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_5, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_35 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_13, PyBUF_WRITABLE); if (unlikely(!__pyx_t_35.memview)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_v_Phi, 1);
      __pyx_v_Phi = __pyx_t_35;
      __pyx_t_35.memview = NULL;
      __pyx_t_35.data = NULL;
 1281:         else:
+1282:             NRPhi0[ii] = NRPhi0[ii-1] + NRPhi[ii-1]
    /*else*/ {
      __pyx_t_36 = (__pyx_v_ii - 1);
      __pyx_t_37 = (__pyx_v_ii - 1);
      __pyx_t_38 = __pyx_v_ii;
      *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_38)) )) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_36)) ))) + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_37)) ))));
    }
    __pyx_L9:;
+1283:         for jj in range(0,NRPhi[ii]):
    __pyx_t_39 = __pyx_v_ii;
    __pyx_t_40 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_39)) )));
    __pyx_t_41 = __pyx_t_40;
    for (__pyx_t_42 = 0; __pyx_t_42 < __pyx_t_41; __pyx_t_42+=1) {
      __pyx_v_jj = __pyx_t_42;
+1284:             Phi[ii,jj] = PhiMinMax[0] + (0.5+<double>jj)*dPhir[ii]
      __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_PhiMinMax, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_43 = __pyx_v_ii;
      __pyx_t_14 = PyFloat_FromDouble(((0.5 + ((double)__pyx_v_jj)) * (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dPhir.data) + __pyx_t_43)) ))))); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_12 = PyNumber_Add(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1284, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 1284, __pyx_L1_error) }
      __pyx_t_44 = __pyx_v_ii;
      __pyx_t_45 = __pyx_v_jj;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_44 * __pyx_v_Phi.strides[0]) )) + __pyx_t_45)) )) = __pyx_t_10;
    }
  }
+1285:     nRPhi0 = NRPhi0[Ln-1]+NRPhi[Ln-1]
  __pyx_t_46 = (__pyx_v_Ln - 1);
  __pyx_t_47 = (__pyx_v_Ln - 1);
  __pyx_v_nRPhi0 = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_46)) ))) + (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi.data) + __pyx_t_47)) ))));
 1286: 
+1287:     if Out.lower()=='(x,y,z)':
  __pyx_t_12 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_12, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 1287, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L12;
  }
+1288:         for ii in range(0,NP):
    __pyx_t_40 = __pyx_v_NP;
    __pyx_t_41 = __pyx_t_40;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_41; __pyx_t_18+=1) {
      __pyx_v_ii = __pyx_t_18;
+1289:             for jj in range(0,Ln+1):
      __pyx_t_48 = (__pyx_v_Ln + 1);
      __pyx_t_49 = __pyx_t_48;
      for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_49; __pyx_t_26+=1) {
        __pyx_v_jj = __pyx_t_26;
+1290:                 if ind[ii]-NRPhi0[jj]<0.:
        __pyx_t_50 = __pyx_v_ii;
        __pyx_t_51 = __pyx_v_jj;
        __pyx_t_9 = ((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_50)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_51)) )))) < 0.) != 0);
        if (__pyx_t_9) {
/* … */
        }
      }
      __pyx_L16_break:;
+1291:                     break
          goto __pyx_L16_break;
+1292:             iiL = jj-1
      __pyx_v_iiL = (__pyx_v_jj - 1);
+1293:             iiphi = ind[ii] - NRPhi0[iiL]
      __pyx_t_52 = __pyx_v_ii;
      __pyx_t_53 = __pyx_v_iiL;
      __pyx_v_iiphi = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_52)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_53)) ))));
+1294:             Pts[0,ii] = PtsCross[0,iiL]*Ccos(Phi[iiL,iiphi])
      __pyx_t_54 = 0;
      __pyx_t_55 = __pyx_v_iiL;
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 1294, __pyx_L1_error) }
      __pyx_t_56 = __pyx_v_iiL;
      __pyx_t_57 = __pyx_v_iiphi;
      __pyx_t_58 = 0;
      __pyx_t_59 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_58, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_59, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_55, __pyx_pybuffernd_PtsCross.diminfo[1].strides)) * cos((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_56 * __pyx_v_Phi.strides[0]) )) + __pyx_t_57)) )))));
+1295:             Pts[1,ii] = PtsCross[0,iiL]*Csin(Phi[iiL,iiphi])
      __pyx_t_60 = 0;
      __pyx_t_61 = __pyx_v_iiL;
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 1295, __pyx_L1_error) }
      __pyx_t_62 = __pyx_v_iiL;
      __pyx_t_63 = __pyx_v_iiphi;
      __pyx_t_64 = 1;
      __pyx_t_65 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_64, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_65, __pyx_pybuffernd_Pts.diminfo[1].strides) = ((*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_60, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_61, __pyx_pybuffernd_PtsCross.diminfo[1].strides)) * sin((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_62 * __pyx_v_Phi.strides[0]) )) + __pyx_t_63)) )))));
+1296:             Pts[2,ii] = PtsCross[1,iiL]
      __pyx_t_66 = 1;
      __pyx_t_67 = __pyx_v_iiL;
      __pyx_t_68 = 2;
      __pyx_t_69 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_68, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_69, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_66, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_67, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1297:             dS[ii] = dLrRef[iiL]*dRPhirRef[iiL]
      __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_dLrRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_70 = __pyx_v_iiL;
      __pyx_t_14 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_70)) )))); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_13 = PyNumber_Multiply(__pyx_t_12, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1297, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_13); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1297, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_71 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dS.rcbuffer->pybuffer.buf, __pyx_t_71, __pyx_pybuffernd_dS.diminfo[0].strides) = __pyx_t_10;
+1298:             if dRPhir[iiL]==-1.:
      __pyx_t_72 = __pyx_v_iiL;
      __pyx_t_9 = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_72, __pyx_pybuffernd_dRPhir.diminfo[0].strides)) == -1.) != 0);
      if (__pyx_t_9) {
/* … */
      }
    }
+1299:                 dRPhir[iiL] = dRPhirRef[iiL]
        __pyx_t_73 = __pyx_v_iiL;
        __pyx_t_74 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_74, __pyx_pybuffernd_dRPhir.diminfo[0].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_73)) )));
+1300:                 dLr[iiL] = dLrRef[iiL]
        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_dLrRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1300, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_13); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1300, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_75 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_75, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_t_10;
+1301:                 Rref[iiL] = RrefRef[iiL]
        __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_RrefRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1301, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_13); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1301, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __pyx_t_76 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Rref.rcbuffer->pybuffer.buf, __pyx_t_76, __pyx_pybuffernd_Rref.diminfo[0].strides) = __pyx_t_10;
 1302: 
 1303:     else:
+1304:         for ii in range(0,NP):
  /*else*/ {
    __pyx_t_40 = __pyx_v_NP;
    __pyx_t_41 = __pyx_t_40;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_41; __pyx_t_18+=1) {
      __pyx_v_ii = __pyx_t_18;
+1305:             for jj in range(0,Ln+1):
      __pyx_t_48 = (__pyx_v_Ln + 1);
      __pyx_t_49 = __pyx_t_48;
      for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_49; __pyx_t_26+=1) {
        __pyx_v_jj = __pyx_t_26;
+1306:                 if ind[ii]-NRPhi0[jj]<0.:
        __pyx_t_77 = __pyx_v_ii;
        __pyx_t_78 = __pyx_v_jj;
        __pyx_t_9 = ((((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_77)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_78)) )))) < 0.) != 0);
        if (__pyx_t_9) {
/* … */
        }
      }
      __pyx_L22_break:;
+1307:                     break
          goto __pyx_L22_break;
+1308:             iiL = jj-1
      __pyx_v_iiL = (__pyx_v_jj - 1);
+1309:             iiphi = ind[ii] - NRPhi0[iiL]
      __pyx_t_79 = __pyx_v_ii;
      __pyx_t_80 = __pyx_v_iiL;
      __pyx_v_iiphi = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_ind.data) + __pyx_t_79)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_NRPhi0.data) + __pyx_t_80)) ))));
+1310:             Pts[0,ii] = PtsCross[0,iiL]
      __pyx_t_81 = 0;
      __pyx_t_82 = __pyx_v_iiL;
      __pyx_t_83 = 0;
      __pyx_t_84 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_83, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_84, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_81, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_82, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1311:             Pts[1,ii] = PtsCross[1,iiL]
      __pyx_t_85 = 1;
      __pyx_t_86 = __pyx_v_iiL;
      __pyx_t_87 = 1;
      __pyx_t_88 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_87, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_88, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.buf, __pyx_t_85, __pyx_pybuffernd_PtsCross.diminfo[0].strides, __pyx_t_86, __pyx_pybuffernd_PtsCross.diminfo[1].strides));
+1312:             Pts[2,ii] = Phi[iiL,iiphi]
      if (unlikely(!__pyx_v_Phi.memview)) { __Pyx_RaiseUnboundLocalError("Phi"); __PYX_ERR(0, 1312, __pyx_L1_error) }
      __pyx_t_89 = __pyx_v_iiL;
      __pyx_t_90 = __pyx_v_iiphi;
      __pyx_t_91 = 2;
      __pyx_t_92 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_Pts.rcbuffer->pybuffer.buf, __pyx_t_91, __pyx_pybuffernd_Pts.diminfo[0].strides, __pyx_t_92, __pyx_pybuffernd_Pts.diminfo[1].strides) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Phi.data + __pyx_t_89 * __pyx_v_Phi.strides[0]) )) + __pyx_t_90)) )));
+1313:             dS[ii] = dLrRef[iiL]*dRPhirRef[iiL]
      __pyx_t_13 = __Pyx_GetItemInt(__pyx_v_dLrRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_93 = __pyx_v_iiL;
      __pyx_t_14 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_93)) )))); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_12 = PyNumber_Multiply(__pyx_t_13, __pyx_t_14); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1313, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_94 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dS.rcbuffer->pybuffer.buf, __pyx_t_94, __pyx_pybuffernd_dS.diminfo[0].strides) = __pyx_t_10;
+1314:             if dRPhir[iiL]==-1.:
      __pyx_t_95 = __pyx_v_iiL;
      __pyx_t_9 = (((*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_95, __pyx_pybuffernd_dRPhir.diminfo[0].strides)) == -1.) != 0);
      if (__pyx_t_9) {
/* … */
      }
    }
  }
  __pyx_L12:;
+1315:                 dRPhir[iiL] = dRPhirRef[iiL]
        __pyx_t_96 = __pyx_v_iiL;
        __pyx_t_97 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.buf, __pyx_t_97, __pyx_pybuffernd_dRPhir.diminfo[0].strides) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dRPhirRef.data) + __pyx_t_96)) )));
+1316:                 dLr[iiL] = dLrRef[iiL]
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_dLrRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1316, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1316, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_98 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_98, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_t_10;
+1317:                 Rref[iiL] = RrefRef[iiL]
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_RrefRef, __pyx_v_iiL, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1317, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_t_12); if (unlikely((__pyx_t_10 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1317, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_99 = __pyx_v_iiL;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Rref.rcbuffer->pybuffer.buf, __pyx_t_99, __pyx_pybuffernd_Rref.diminfo[0].strides) = __pyx_t_10;
+1318:     return Pts, dS, NL, dLr[dLr>-0.5], Rref[Rref>-0.5], \
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12 = PyObject_RichCompare(((PyObject *)__pyx_v_dLr), __pyx_float_neg_0_5, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_14 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), __pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = PyObject_RichCompare(((PyObject *)__pyx_v_Rref), __pyx_float_neg_0_5, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Rref), __pyx_t_12); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
  __pyx_t_2 = PyTuple_New(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_t_12);
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_2, 7, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_14 = 0;
  __pyx_t_13 = 0;
  __pyx_t_5 = 0;
  __pyx_t_12 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
+1319:       dRPhir[dRPhir>-0.5], <long>nRPhi0, VPbis
  __pyx_t_12 = PyObject_RichCompare(((PyObject *)__pyx_v_dRPhir), __pyx_float_neg_0_5, Py_GT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dRPhir), __pyx_t_12); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyInt_From_long(((long)__pyx_v_nRPhi0)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
 1320: 
 1321: 
 1322: 
 1323: ########################################################
 1324: ########################################################
 1325: #       Meshing - Surface - TorStruct
 1326: ########################################################
 1327: 
 1328: 
 1329: @cython.cdivision(True)
 1330: @cython.wraparound(False)
 1331: @cython.boundscheck(False)
+1332: def _Ves_Smesh_TorStruct_SubFromD_cython(double[::1] PhiMinMax, double dL,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_37_Ves_Smesh_TorStruct_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_36_Ves_Smesh_TorStruct_SubFromD_cython[] = "Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi),\n    for the desired resolution (dR,dZ,dRphi)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_37_Ves_Smesh_TorStruct_SubFromD_cython = {"_Ves_Smesh_TorStruct_SubFromD_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_37_Ves_Smesh_TorStruct_SubFromD_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_36_Ves_Smesh_TorStruct_SubFromD_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_37_Ves_Smesh_TorStruct_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_PhiMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_DR = 0;
  PyObject *__pyx_v_DZ = 0;
  PyObject *__pyx_v_DPhi = 0;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_TorStruct_SubFromD_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_PhiMinMax,&__pyx_n_s_dL,&__pyx_n_s_dRPhi,&__pyx_n_s_VPoly,&__pyx_n_s_DR,&__pyx_n_s_DZ,&__pyx_n_s_DPhi,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_36_Ves_Smesh_TorStruct_SubFromD_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_PhiMinMax, double __pyx_v_dL, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_VPoly, PyObject *__pyx_v_DR, PyObject *__pyx_v_DZ, PyObject *__pyx_v_DPhi, double __pyx_v_DIn, PyObject *__pyx_v_VIn, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  double __pyx_v_Dphi;
  double __pyx_v_dR0r;
  double __pyx_v_dZ0r;
  int __pyx_v_NR0;
  int __pyx_v_NZ0;
  int __pyx_v_R0n;
  int __pyx_v_Z0n;
  __Pyx_memviewslice __pyx_v_phiMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_R0 = 0;
  PyArrayObject *__pyx_v_Z0 = 0;
  PyArrayObject *__pyx_v_dsF = 0;
  PyArrayObject *__pyx_v_dSM = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_dRPhir = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_indR0 = 0;
  PyArrayObject *__pyx_v_indZ0 = 0;
  PyArrayObject *__pyx_v_iind = 0;
  PyArrayObject *__pyx_v_iindF = 0;
  PyArrayObject *__pyx_v_indM = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyArrayObject *__pyx_v_ptsrz = 0;
  PyArrayObject *__pyx_v_pts = 0;
  PyArrayObject *__pyx_v_PtsM = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_Pts = 0;
  PyObject *__pyx_v_LPts = 0;
  PyObject *__pyx_v_LdS = 0;
  PyObject *__pyx_v_Lind = 0;
  CYTHON_UNUSED PyObject *__pyx_v_DPhiMinMax = NULL;
  int __pyx_v_Full;
  PyObject *__pyx_v_DPhi0 = NULL;
  PyObject *__pyx_v_DPhi1 = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_DDPhi = NULL;
  PyObject *__pyx_v_Inter = NULL;
  PyObject *__pyx_v_Bounds = NULL;
  PyObject *__pyx_v_Faces = NULL;
  PyObject *__pyx_v_BC = NULL;
  Py_ssize_t __pyx_v_nBounds;
  Py_ssize_t __pyx_v_ii;
  PyObject *__pyx_v_indin = NULL;
  PyObject *__pyx_v_nRPhi0 = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsM;
  __Pyx_Buffer __pyx_pybuffer_PtsM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_R0;
  __Pyx_Buffer __pyx_pybuffer_R0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Z0;
  __Pyx_Buffer __pyx_pybuffer_Z0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dRPhir;
  __Pyx_Buffer __pyx_pybuffer_dRPhir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dSM;
  __Pyx_Buffer __pyx_pybuffer_dSM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dsF;
  __Pyx_Buffer __pyx_pybuffer_dsF;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_iind;
  __Pyx_Buffer __pyx_pybuffer_iind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_iindF;
  __Pyx_Buffer __pyx_pybuffer_iindF;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indM;
  __Pyx_Buffer __pyx_pybuffer_indM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indR0;
  __Pyx_Buffer __pyx_pybuffer_indR0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ0;
  __Pyx_Buffer __pyx_pybuffer_indZ0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pts;
  __Pyx_Buffer __pyx_pybuffer_pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ptsrz;
  __Pyx_Buffer __pyx_pybuffer_ptsrz;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_TorStruct_SubFromD_cython", 0);
  __pyx_pybuffer_R0.pybuffer.buf = NULL;
  __pyx_pybuffer_R0.refcount = 0;
  __pyx_pybuffernd_R0.data = NULL;
  __pyx_pybuffernd_R0.rcbuffer = &__pyx_pybuffer_R0;
  __pyx_pybuffer_Z0.pybuffer.buf = NULL;
  __pyx_pybuffer_Z0.refcount = 0;
  __pyx_pybuffernd_Z0.data = NULL;
  __pyx_pybuffernd_Z0.rcbuffer = &__pyx_pybuffer_Z0;
  __pyx_pybuffer_dsF.pybuffer.buf = NULL;
  __pyx_pybuffer_dsF.refcount = 0;
  __pyx_pybuffernd_dsF.data = NULL;
  __pyx_pybuffernd_dsF.rcbuffer = &__pyx_pybuffer_dsF;
  __pyx_pybuffer_dSM.pybuffer.buf = NULL;
  __pyx_pybuffer_dSM.refcount = 0;
  __pyx_pybuffernd_dSM.data = NULL;
  __pyx_pybuffernd_dSM.rcbuffer = &__pyx_pybuffer_dSM;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_dRPhir.pybuffer.buf = NULL;
  __pyx_pybuffer_dRPhir.refcount = 0;
  __pyx_pybuffernd_dRPhir.data = NULL;
  __pyx_pybuffernd_dRPhir.rcbuffer = &__pyx_pybuffer_dRPhir;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_indR0.pybuffer.buf = NULL;
  __pyx_pybuffer_indR0.refcount = 0;
  __pyx_pybuffernd_indR0.data = NULL;
  __pyx_pybuffernd_indR0.rcbuffer = &__pyx_pybuffer_indR0;
  __pyx_pybuffer_indZ0.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ0.refcount = 0;
  __pyx_pybuffernd_indZ0.data = NULL;
  __pyx_pybuffernd_indZ0.rcbuffer = &__pyx_pybuffer_indZ0;
  __pyx_pybuffer_iind.pybuffer.buf = NULL;
  __pyx_pybuffer_iind.refcount = 0;
  __pyx_pybuffernd_iind.data = NULL;
  __pyx_pybuffernd_iind.rcbuffer = &__pyx_pybuffer_iind;
  __pyx_pybuffer_iindF.pybuffer.buf = NULL;
  __pyx_pybuffer_iindF.refcount = 0;
  __pyx_pybuffernd_iindF.data = NULL;
  __pyx_pybuffernd_iindF.rcbuffer = &__pyx_pybuffer_iindF;
  __pyx_pybuffer_indM.pybuffer.buf = NULL;
  __pyx_pybuffer_indM.refcount = 0;
  __pyx_pybuffernd_indM.data = NULL;
  __pyx_pybuffernd_indM.rcbuffer = &__pyx_pybuffer_indM;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  __pyx_pybuffer_ptsrz.pybuffer.buf = NULL;
  __pyx_pybuffer_ptsrz.refcount = 0;
  __pyx_pybuffernd_ptsrz.data = NULL;
  __pyx_pybuffernd_ptsrz.rcbuffer = &__pyx_pybuffer_ptsrz;
  __pyx_pybuffer_pts.pybuffer.buf = NULL;
  __pyx_pybuffer_pts.refcount = 0;
  __pyx_pybuffernd_pts.data = NULL;
  __pyx_pybuffernd_pts.rcbuffer = &__pyx_pybuffer_pts;
  __pyx_pybuffer_PtsM.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsM.refcount = 0;
  __pyx_pybuffernd_PtsM.data = NULL;
  __pyx_pybuffernd_PtsM.rcbuffer = &__pyx_pybuffer_PtsM;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_XDECREF(__pyx_t_33);
  __Pyx_XDECREF(__pyx_t_41);
  __PYX_XDEC_MEMVIEW(&__pyx_t_49, 1);
  __Pyx_XDECREF(__pyx_t_53);
  __Pyx_XDECREF(__pyx_t_54);
  __Pyx_XDECREF(__pyx_t_56);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dsF.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iindF.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_TorStruct_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dsF.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iindF.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_phiMinMax, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_R0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Z0);
  __Pyx_XDECREF((PyObject *)__pyx_v_dsF);
  __Pyx_XDECREF((PyObject *)__pyx_v_dSM);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_dRPhir);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_indR0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ0);
  __Pyx_XDECREF((PyObject *)__pyx_v_iind);
  __Pyx_XDECREF((PyObject *)__pyx_v_iindF);
  __Pyx_XDECREF((PyObject *)__pyx_v_indM);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF((PyObject *)__pyx_v_ptsrz);
  __Pyx_XDECREF((PyObject *)__pyx_v_pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsM);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF(__pyx_v_LPts);
  __Pyx_XDECREF(__pyx_v_LdS);
  __Pyx_XDECREF(__pyx_v_Lind);
  __Pyx_XDECREF(__pyx_v_DPhiMinMax);
  __Pyx_XDECREF(__pyx_v_DPhi0);
  __Pyx_XDECREF(__pyx_v_DPhi1);
  __Pyx_XDECREF(__pyx_v_DDPhi);
  __Pyx_XDECREF(__pyx_v_Inter);
  __Pyx_XDECREF(__pyx_v_Bounds);
  __Pyx_XDECREF(__pyx_v_Faces);
  __Pyx_XDECREF(__pyx_v_BC);
  __Pyx_XDECREF(__pyx_v_indin);
  __Pyx_XDECREF(__pyx_v_nRPhi0);
  __PYX_XDEC_MEMVIEW(&__pyx_v_PhiMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__194 = PyTuple_Pack(56, __pyx_n_s_PhiMinMax, __pyx_n_s_dL, __pyx_n_s_dRPhi, __pyx_n_s_VPoly, __pyx_n_s_DR, __pyx_n_s_DZ, __pyx_n_s_DPhi, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_Dphi, __pyx_n_s_dR0r, __pyx_n_s_dZ0r, __pyx_n_s_NR0, __pyx_n_s_NZ0, __pyx_n_s_R0n, __pyx_n_s_Z0n, __pyx_n_s_NRPhi0, __pyx_n_s_phiMinMax, __pyx_n_s_R0, __pyx_n_s_Z0, __pyx_n_s_dsF, __pyx_n_s_dSM, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_dRPhir, __pyx_n_s_dS, __pyx_n_s_indR0, __pyx_n_s_indZ0, __pyx_n_s_iind, __pyx_n_s_iindF, __pyx_n_s_indM, __pyx_n_s_NL, __pyx_n_s_ind, __pyx_n_s_ptsrz, __pyx_n_s_pts, __pyx_n_s_PtsM, __pyx_n_s_VPbis, __pyx_n_s_Pts, __pyx_n_s_LPts, __pyx_n_s_LdS, __pyx_n_s_Lind, __pyx_n_s_DPhiMinMax, __pyx_n_s_Full, __pyx_n_s_DPhi0, __pyx_n_s_DPhi1, __pyx_n_s_DDPhi, __pyx_n_s_Inter, __pyx_n_s_Bounds, __pyx_n_s_Faces, __pyx_n_s_BC, __pyx_n_s_nBounds, __pyx_n_s_ii, __pyx_n_s_indin, __pyx_n_s_nRPhi0); if (unlikely(!__pyx_tuple__194)) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__194);
  __Pyx_GIVEREF(__pyx_tuple__194);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_37_Ves_Smesh_TorStruct_SubFromD_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_TorStruct_SubFromD_cy, __pyx_t_1) < 0) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__195 = (PyObject*)__Pyx_PyCode_New(11, 0, 56, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__194, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_TorStruct_SubFromD_cy, 1332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__195)) __PYX_ERR(0, 1332, __pyx_L1_error)
 1333:                                          double dRPhi,
 1334:                                          double[:,::1] VPoly,
+1335:                                          DR=None, DZ=None, DPhi=None,
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+1336:                                          double DIn=0., VIn=None,
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_PhiMinMax)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromD_cython", 0, 4, 11, 1); __PYX_ERR(0, 1332, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromD_cython", 0, 4, 11, 2); __PYX_ERR(0, 1332, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromD_cython", 0, 4, 11, 3); __PYX_ERR(0, 1332, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DR);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DZ);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DPhi);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_TorStruct_SubFromD_cython") < 0)) __PYX_ERR(0, 1332, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_PhiMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_PhiMinMax.memview)) __PYX_ERR(0, 1332, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1332, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1333, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1334, __pyx_L3_error)
    __pyx_v_DR = values[4];
    __pyx_v_DZ = values[5];
    __pyx_v_DPhi = values[6];
    if (values[7]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1336, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[8];
    __pyx_v_Out = ((PyObject*)values[9]);
    if (values[10]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1338, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__53;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromD_cython", 0, 4, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1332, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_TorStruct_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 1337, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_36_Ves_Smesh_TorStruct_SubFromD_cython(__pyx_self, __pyx_v_PhiMinMax, __pyx_v_dL, __pyx_v_dRPhi, __pyx_v_VPoly, __pyx_v_DR, __pyx_v_DZ, __pyx_v_DPhi, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_Out, __pyx_v_margin);
 1337:                                          str Out='(X,Y,Z)',
+1338:                                          double margin=_VSMALL):
  __pyx_k__53 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1339:     """Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi),
 1340:     for the desired resolution (dR,dZ,dRphi)
 1341:     """
+1342:     cdef double Dphi, dR0r=0., dZ0r=0.
  __pyx_v_dR0r = 0.;
  __pyx_v_dZ0r = 0.;
+1343:     cdef int NR0=0, NZ0=0, R0n, Z0n, NRPhi0
  __pyx_v_NR0 = 0;
  __pyx_v_NZ0 = 0;
+1344:     cdef double[::1] phiMinMax = np.array([Catan2(Csin(PhiMinMax[0]),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = 0;
/* … */
  __pyx_t_2 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_4)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_5)) )))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
  __pyx_t_2 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_phiMinMax = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+1345:                                                   Ccos(PhiMinMax[0])),
  __pyx_t_5 = 0;
+1346:                                            Catan2(Csin(PhiMinMax[1]),
  __pyx_t_6 = 1;
/* … */
  __pyx_t_8 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_6)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_7)) )))))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
+1347:                                                   Ccos(PhiMinMax[1]))])
  __pyx_t_7 = 1;
 1348:     cdef np.ndarray[double, ndim=1] R0, Z0, dsF, dSM, dLr, Rref, dRPhir, dS
 1349:     cdef np.ndarray[long,ndim=1] indR0, indZ0, iind, iindF, indM, NL, ind
 1350:     cdef np.ndarray[double,ndim=2] ptsrz, pts, PtsM, VPbis, Pts
+1351:     cdef list LPts=[], LdS=[], Lind=[]
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LPts = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LdS = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1351, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Lind = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1352: 
 1353:     # Pre-format input
+1354:     if PhiMinMax is None:
  __pyx_t_11 = ((((PyObject *) __pyx_v_PhiMinMax.memview) == Py_None) != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L3;
  }
+1355:         PhiMinMax = np.array([-Cpi,Cpi])
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyFloat_FromDouble((-M_PI)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_8);
    PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_8);
    __pyx_t_3 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1355, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_PhiMinMax, 1);
    __pyx_v_PhiMinMax = __pyx_t_10;
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
+1356:         DPhiMinMax = 2.*Cpi
    __pyx_t_1 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1356, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_DPhiMinMax = __pyx_t_1;
    __pyx_t_1 = 0;
+1357:         Full = True
    __pyx_v_Full = 1;
 1358:     else:
+1359:         PhiMinMax = np.array([Catan2(Csin(PhiMinMax[0]),Ccos(PhiMinMax[0])),
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_12 = 0;
    __pyx_t_13 = 0;
    __pyx_t_9 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_12)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_13)) )))))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
/* … */
    __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_9);
    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_8);
    PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_8);
    __pyx_t_9 = 0;
    __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1359, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_PhiMinMax, 1);
    __pyx_v_PhiMinMax = __pyx_t_10;
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
+1360:                               Catan2(Csin(PhiMinMax[1]),Ccos(PhiMinMax[1]))])
    __pyx_t_14 = 1;
    __pyx_t_15 = 1;
    __pyx_t_8 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_14)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_15)) )))))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1360, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
+1361:         DPhiMinMax = PhiMinMax[1]-PhiMinMax[0] if PhiMinMax[1]>=PhiMinMax[0]\
    __pyx_t_16 = 1;
    __pyx_t_17 = 0;
    if ((((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_16)) ))) >= (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_17)) )))) != 0)) {
      __pyx_t_18 = 1;
      __pyx_t_19 = 0;
      __pyx_t_2 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_18)) ))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_19)) ))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
    } else {
+1362:           else 2.*Cpi + PhiMinMax[1] - PhiMinMax[0]
      __pyx_t_20 = 1;
      __pyx_t_21 = 0;
      __pyx_t_2 = PyFloat_FromDouble((((2. * M_PI) + (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_20)) )))) - (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_21)) ))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1362, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
    }
    __pyx_v_DPhiMinMax = __pyx_t_1;
    __pyx_t_1 = 0;
+1363:         Full = False
    __pyx_v_Full = 0;
  }
  __pyx_L3:;
 1364: 
 1365:     # Get the limits if any and make sure to replace them in the proper quadrant
+1366:     if DPhi is None:
  __pyx_t_11 = (__pyx_v_DPhi == Py_None);
  __pyx_t_22 = (__pyx_t_11 != 0);
  if (__pyx_t_22) {
/* … */
    goto __pyx_L4;
  }
+1367:         DPhi0, DPhi1 = PhiMinMax[0], PhiMinMax[1]
    __pyx_t_23 = 0;
    __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_23)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_24 = 1;
    __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_24)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_DPhi0 = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_v_DPhi1 = __pyx_t_2;
    __pyx_t_2 = 0;
 1368:     else:
+1369:         DPhi0 = PhiMinMax[0] if DPhi[0] is None \
  /*else*/ {
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1369, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_22 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if ((__pyx_t_22 != 0)) {
      __pyx_t_25 = 0;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_25)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1369, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_t_1;
      __pyx_t_1 = 0;
    } else {
+1370:           else Catan2(Csin(DPhi[0]),Ccos(DPhi[0]))
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1370, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_27 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_27 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1370, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyFloat_FromDouble(atan2(sin(__pyx_t_26), cos(__pyx_t_27))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1370, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_v_DPhi0 = __pyx_t_2;
    __pyx_t_2 = 0;
+1371:         DPhi1 = PhiMinMax[1] if DPhi[1] is None \
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1371, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_22 = (__pyx_t_1 == Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if ((__pyx_t_22 != 0)) {
      __pyx_t_28 = 1;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_28)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1371, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_t_1;
      __pyx_t_1 = 0;
    } else {
+1372:           else Catan2(Csin(DPhi[1]),Ccos(DPhi[1]))
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_27 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_27 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DPhi, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1372, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyFloat_FromDouble(atan2(sin(__pyx_t_27), cos(__pyx_t_26))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1372, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_t_1;
      __pyx_t_1 = 0;
    }
    __pyx_v_DPhi1 = __pyx_t_2;
    __pyx_t_2 = 0;
  }
  __pyx_L4:;
+1373:     DDPhi = DPhi1-DPhi0 if DPhi1>DPhi0 else 2.*Cpi+DPhi1-DPhi0
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_DPhi1, __pyx_v_DPhi0, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1373, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_22) {
    __pyx_t_1 = PyNumber_Subtract(__pyx_v_DPhi1, __pyx_v_DPhi0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  } else {
    __pyx_t_1 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_v_DPhi1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_3, __pyx_v_DPhi0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_v_DDPhi = __pyx_t_2;
  __pyx_t_2 = 0;
 1374: 
+1375:     Inter, Bounds, Faces = _getBoundsInter2AngSeg(Full, PhiMinMax[0],
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_getBoundsInter2AngSeg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_Full); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_29 = 0;
  __pyx_t_8 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_29)) )))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
/* … */
  __pyx_v_Inter = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_Bounds = __pyx_t_33;
  __pyx_t_33 = 0;
  __pyx_v_Faces = __pyx_t_9;
  __pyx_t_9 = 0;
+1376:                                                   PhiMinMax[1], DPhi0, DPhi1)
  __pyx_t_30 = 1;
  __pyx_t_9 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_30)) )))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_31 = NULL;
  __pyx_t_32 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_31 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_31)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_31);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_32 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_31, __pyx_t_3, __pyx_t_8, __pyx_t_9, __pyx_v_DPhi0, __pyx_v_DPhi1};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_32, 5+__pyx_t_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[6] = {__pyx_t_31, __pyx_t_3, __pyx_t_8, __pyx_t_9, __pyx_v_DPhi0, __pyx_v_DPhi1};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_32, 5+__pyx_t_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  } else
  #endif
  {
    __pyx_t_33 = PyTuple_New(5+__pyx_t_32); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    if (__pyx_t_31) {
      __Pyx_GIVEREF(__pyx_t_31); PyTuple_SET_ITEM(__pyx_t_33, 0, __pyx_t_31); __pyx_t_31 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_33, 0+__pyx_t_32, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_33, 1+__pyx_t_32, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_33, 2+__pyx_t_32, __pyx_t_9);
    __Pyx_INCREF(__pyx_v_DPhi0);
    __Pyx_GIVEREF(__pyx_v_DPhi0);
    PyTuple_SET_ITEM(__pyx_t_33, 3+__pyx_t_32, __pyx_v_DPhi0);
    __Pyx_INCREF(__pyx_v_DPhi1);
    __Pyx_GIVEREF(__pyx_v_DPhi1);
    PyTuple_SET_ITEM(__pyx_t_33, 4+__pyx_t_32, __pyx_v_DPhi1);
    __pyx_t_3 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_33, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1375, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_33 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_33 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_33);
    __Pyx_INCREF(__pyx_t_9);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_33 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_34 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_34(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_33 = __pyx_t_34(__pyx_t_8); if (unlikely(!__pyx_t_33)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_33);
    index = 2; __pyx_t_9 = __pyx_t_34(__pyx_t_8); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_34(__pyx_t_8), 3) < 0) __PYX_ERR(0, 1375, __pyx_L1_error)
    __pyx_t_34 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_34 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1375, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
 1377: 
+1378:     if Inter:
  __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_v_Inter); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1378, __pyx_L1_error)
  if (__pyx_t_22) {
/* … */
    goto __pyx_L7;
  }
+1379:         BC = list(Bounds)
    __pyx_t_2 = PySequence_List(__pyx_v_Bounds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_BC = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+1380:         nBounds = len(Bounds)
    __pyx_t_35 = PyObject_Length(__pyx_v_Bounds); if (unlikely(__pyx_t_35 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1380, __pyx_L1_error)
    __pyx_v_nBounds = __pyx_t_35;
+1381:         for ii in range(0,nBounds):
    __pyx_t_35 = __pyx_v_nBounds;
    __pyx_t_36 = __pyx_t_35;
    for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) {
      __pyx_v_ii = __pyx_t_37;
+1382:             if BC[ii][0]<PhiMinMax[0]:
      __pyx_t_2 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii), 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1382, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_38 = 0;
      __pyx_t_9 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_38)) )))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1382, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_33 = PyObject_RichCompare(__pyx_t_2, __pyx_t_9, Py_LT); __Pyx_XGOTREF(__pyx_t_33); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1382, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_33); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1382, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      if (__pyx_t_22) {
/* … */
      }
+1383:                 BC[ii][0] += 2.*Cpi
        __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii));
        __pyx_t_33 = PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii);
        __pyx_t_39 = 0;
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_33, __pyx_t_39, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1383, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_2 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1383, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_t_33, __pyx_t_39, __pyx_t_1, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 1383, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
+1384:             if BC[ii][1]<=PhiMinMax[0]:
      __pyx_t_33 = __Pyx_GetItemInt(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii), 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1384, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_40 = 0;
      __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_40)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1384, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_33, __pyx_t_1, Py_LE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1384, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1384, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_22) {
/* … */
      }
    }
+1385:                 BC[ii][1] += 2.*Cpi
        __Pyx_INCREF(PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii));
        __pyx_t_2 = PyList_GET_ITEM(__pyx_v_BC, __pyx_v_ii);
        __pyx_t_39 = 1;
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_t_39, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_33 = PyFloat_FromDouble((2. * M_PI)); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_t_1, __pyx_t_33); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1385, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_t_2, __pyx_t_39, __pyx_t_9, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0) < 0)) __PYX_ERR(0, 1385, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 1386: 
 1387:         # Required distance effective at max R
+1388:         Dphi = DIn/np.max(VPoly[0,:]) if DIn!=0. else 0.
    if (((__pyx_v_DIn != 0.) != 0)) {
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_max); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __pyx_t_10.data = __pyx_v_VPoly.data;
      __pyx_t_10.memview = __pyx_v_VPoly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1388, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_33 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_9 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_33) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_33);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_27 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_27 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1388, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_26 = __pyx_t_27;
    } else {
      __pyx_t_26 = 0.;
    }
    __pyx_v_Dphi = __pyx_t_26;
 1389: 
 1390:         # Get the mesh for the faces
+1391:         if any(Faces) :
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_v_Faces); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1391, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1391, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_22) {
/* … */
    }
+1392:             R0, dR0r, indR0,\
      if (!(likely(((__pyx_t_33) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_33, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1392, __pyx_L1_error)
      __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_t_31); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1392, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1392, __pyx_L1_error)
      __pyx_t_32 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_32 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1392, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_42 = ((PyArrayObject *)__pyx_t_33);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
        __pyx_t_43 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_43 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_v_R0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_R0.diminfo[0].strides = __pyx_pybuffernd_R0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_R0.diminfo[0].shape = __pyx_pybuffernd_R0.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_43 < 0)) __PYX_ERR(0, 1392, __pyx_L1_error)
      }
      __pyx_t_42 = 0;
      __pyx_v_R0 = ((PyArrayObject *)__pyx_t_33);
      __pyx_t_33 = 0;
      __pyx_v_dR0r = __pyx_t_26;
      __pyx_t_47 = ((PyArrayObject *)__pyx_t_1);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
        __pyx_t_43 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_43 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indR0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_indR0.diminfo[0].strides = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indR0.diminfo[0].shape = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_43 < 0)) __PYX_ERR(0, 1392, __pyx_L1_error)
      }
      __pyx_t_47 = 0;
      __pyx_v_indR0 = ((PyArrayObject *)__pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_v_NR0 = __pyx_t_32;
+1393:               NR0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[0,:]),
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10.data = __pyx_v_VPoly.data;
      __pyx_t_10.memview = __pyx_v_VPoly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1393, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_8 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
      __pyx_t_31 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_31 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_31)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_31);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_2 = (__pyx_t_31) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_31, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __pyx_t_31 = PyList_New(2); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_31, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_31, 1, __pyx_t_3);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_33))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_33);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_33);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_33, function);
        }
      }
      __pyx_t_9 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_33, __pyx_t_3, __pyx_t_31) : __Pyx_PyObject_CallOneArg(__pyx_t_33, __pyx_t_31);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
/* … */
      __pyx_t_31 = PyTuple_New(2); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_33);
      PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_33);
      __pyx_t_9 = 0;
      __pyx_t_33 = 0;
/* … */
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_31, __pyx_t_33); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1393, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
        PyObject* sequence = __pyx_t_9;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 1392, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_33 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_31 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_33 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_31 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_33);
        __Pyx_INCREF(__pyx_t_31);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_33,&__pyx_t_31,&__pyx_t_1,&__pyx_t_3};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1392, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_33,&__pyx_t_31,&__pyx_t_1,&__pyx_t_3};
        __pyx_t_2 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1392, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_34 = Py_TYPE(__pyx_t_2)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_34(__pyx_t_2); if (unlikely(!item)) goto __pyx_L13_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_34(__pyx_t_2), 4) < 0) __PYX_ERR(0, 1392, __pyx_L1_error)
        __pyx_t_34 = NULL;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        goto __pyx_L14_unpacking_done;
        __pyx_L13_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_34 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 1392, __pyx_L1_error)
        __pyx_L14_unpacking_done:;
      }
+1394:                                                        np.max(VPoly[0,:])]),
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_max); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10.data = __pyx_v_VPoly.data;
      __pyx_t_10.memview = __pyx_v_VPoly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1394, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_8 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
      __pyx_t_41 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
        __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_31);
        if (likely(__pyx_t_41)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
          __Pyx_INCREF(__pyx_t_41);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_31, function);
        }
      }
      __pyx_t_3 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_31, __pyx_t_41, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1394, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
+1395:                                              dL, DL=DR, Lim=True, margin=margin)
      __pyx_t_33 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
/* … */
      __pyx_t_33 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      if (PyDict_SetItem(__pyx_t_33, __pyx_n_s_DL, __pyx_v_DR) < 0) __PYX_ERR(0, 1395, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_33, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1395, __pyx_L1_error)
      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (PyDict_SetItem(__pyx_t_33, __pyx_n_s_margin, __pyx_t_9) < 0) __PYX_ERR(0, 1395, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1396:             Z0, dZ0r, indZ0,\
      if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1396, __pyx_L1_error)
      __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1396, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1396, __pyx_L1_error)
      __pyx_t_32 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_32 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1396, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_42 = ((PyArrayObject *)__pyx_t_31);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
        __pyx_t_43 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_43 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_Z0.diminfo[0].strides = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z0.diminfo[0].shape = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_43 < 0)) __PYX_ERR(0, 1396, __pyx_L1_error)
      }
      __pyx_t_42 = 0;
      __pyx_v_Z0 = ((PyArrayObject *)__pyx_t_31);
      __pyx_t_31 = 0;
      __pyx_v_dZ0r = __pyx_t_26;
      __pyx_t_47 = ((PyArrayObject *)__pyx_t_9);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
        __pyx_t_43 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_43 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_43 < 0)) __PYX_ERR(0, 1396, __pyx_L1_error)
      }
      __pyx_t_47 = 0;
      __pyx_v_indZ0 = ((PyArrayObject *)__pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_v_NZ0 = __pyx_t_32;
+1397:               NZ0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[1,:]),
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __pyx_t_10.data = __pyx_v_VPoly.data;
      __pyx_t_10.memview = __pyx_v_VPoly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1397, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_33 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_33) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_33);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
      __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_1);
      PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_2);
      __pyx_t_1 = 0;
      __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_31);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_31, function);
        }
      }
      __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_31, __pyx_t_2, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
/* … */
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_31);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_31);
      __pyx_t_3 = 0;
      __pyx_t_31 = 0;
/* … */
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_8, __pyx_t_31); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
        PyObject* sequence = __pyx_t_3;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 4)) {
          if (size > 4) __Pyx_RaiseTooManyValuesError(4);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 1396, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_31 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); 
        } else {
          __pyx_t_31 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
          __pyx_t_2 = PyList_GET_ITEM(sequence, 3); 
        }
        __Pyx_INCREF(__pyx_t_31);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_2);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[4] = {&__pyx_t_31,&__pyx_t_8,&__pyx_t_9,&__pyx_t_2};
          for (i=0; i < 4; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1396, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else {
        Py_ssize_t index = -1;
        PyObject** temps[4] = {&__pyx_t_31,&__pyx_t_8,&__pyx_t_9,&__pyx_t_2};
        __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1396, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_34 = Py_TYPE(__pyx_t_1)->tp_iternext;
        for (index=0; index < 4; index++) {
          PyObject* item = __pyx_t_34(__pyx_t_1); if (unlikely(!item)) goto __pyx_L15_unpacking_failed;
          __Pyx_GOTREF(item);
          *(temps[index]) = item;
        }
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_34(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1396, __pyx_L1_error)
        __pyx_t_34 = NULL;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L16_unpacking_done;
        __pyx_L15_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_34 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 1396, __pyx_L1_error)
        __pyx_L16_unpacking_done:;
      }
+1398:                                                        np.max(VPoly[1,:])]),
      __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_max); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __pyx_t_10.data = __pyx_v_VPoly.data;
      __pyx_t_10.memview = __pyx_v_VPoly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1398, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_33 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
      __pyx_t_10.memview = NULL;
      __pyx_t_10.data = NULL;
      __pyx_t_41 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_41)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_41);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_2 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_41, __pyx_t_33) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_33);
      __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1398, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1399:                                              dL, DL=DZ, Lim=True, margin=margin)
      __pyx_t_31 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
/* … */
      __pyx_t_31 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_DL, __pyx_v_DZ) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1399, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_31, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 1399, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1400:             R0n, Z0n = len(R0), len(Z0)
      __pyx_t_35 = PyObject_Length(((PyObject *)__pyx_v_R0)); if (unlikely(__pyx_t_35 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1400, __pyx_L1_error)
      __pyx_t_36 = PyObject_Length(((PyObject *)__pyx_v_Z0)); if (unlikely(__pyx_t_36 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1400, __pyx_L1_error)
      __pyx_v_R0n = __pyx_t_35;
      __pyx_v_Z0n = __pyx_t_36;
+1401:             ptsrz = np.array([np.tile(R0,Z0n),np.repeat(Z0,R0n)])
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_tile); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = NULL;
      __pyx_t_32 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_31);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_31, function);
          __pyx_t_32 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_31)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_R0), __pyx_t_8};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_31, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_31)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_R0), __pyx_t_8};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_31, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      {
        __pyx_t_33 = PyTuple_New(2+__pyx_t_32); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_33, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_R0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_R0));
        PyTuple_SET_ITEM(__pyx_t_33, 0+__pyx_t_32, ((PyObject *)__pyx_v_R0));
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_33, 1+__pyx_t_32, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_31, __pyx_t_33, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      }
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_repeat); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      __pyx_t_33 = __Pyx_PyInt_From_int(__pyx_v_R0n); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_33);
      __pyx_t_1 = NULL;
      __pyx_t_32 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_32 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_Z0), __pyx_t_33};
        __pyx_t_31 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_Z0), __pyx_t_33};
        __pyx_t_31 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
      } else
      #endif
      {
        __pyx_t_41 = PyTuple_New(2+__pyx_t_32); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Z0));
        PyTuple_SET_ITEM(__pyx_t_41, 0+__pyx_t_32, ((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(__pyx_t_33);
        PyTuple_SET_ITEM(__pyx_t_41, 1+__pyx_t_32, __pyx_t_33);
        __pyx_t_33 = 0;
        __pyx_t_31 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_41, NULL); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1401, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_31);
      PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_31);
      __pyx_t_2 = 0;
      __pyx_t_31 = 0;
      __pyx_t_31 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_31 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_31)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_31);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_3 = (__pyx_t_31) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_31, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1401, __pyx_L1_error)
      __pyx_t_48 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer, (PyObject*)__pyx_v_ptsrz, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_ptsrz.diminfo[0].strides = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ptsrz.diminfo[0].shape = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ptsrz.diminfo[1].strides = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ptsrz.diminfo[1].shape = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1401, __pyx_L1_error)
      }
      __pyx_t_48 = 0;
      __pyx_v_ptsrz = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
+1402:             iind = NR0*np.repeat(indZ0,R0n) + np.tile(indR0,Z0n)
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_repeat); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_R0n); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = NULL;
      __pyx_t_32 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_31);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_31, function);
          __pyx_t_32 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_31)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, ((PyObject *)__pyx_v_indZ0), __pyx_t_8};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_31, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_31)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, ((PyObject *)__pyx_v_indZ0), __pyx_t_8};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_31, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      } else
      #endif
      {
        __pyx_t_41 = PyTuple_New(2+__pyx_t_32); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        if (__pyx_t_2) {
          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_t_2); __pyx_t_2 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indZ0));
        PyTuple_SET_ITEM(__pyx_t_41, 0+__pyx_t_32, ((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_41, 1+__pyx_t_32, __pyx_t_8);
        __pyx_t_8 = 0;
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_31, __pyx_t_41, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      }
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __pyx_t_31 = PyNumber_Multiply(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_tile); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_8 = NULL;
      __pyx_t_32 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_41))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_41);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_41);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_41, function);
          __pyx_t_32 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_41)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_indR0), __pyx_t_3};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_41, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_41)) {
        PyObject *__pyx_temp[3] = {__pyx_t_8, ((PyObject *)__pyx_v_indR0), __pyx_t_3};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_41, __pyx_temp+1-__pyx_t_32, 2+__pyx_t_32); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      } else
      #endif
      {
        __pyx_t_2 = PyTuple_New(2+__pyx_t_32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (__pyx_t_8) {
          __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_8); __pyx_t_8 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indR0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indR0));
        PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_32, ((PyObject *)__pyx_v_indR0));
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_32, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_41, __pyx_t_2, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_t_41 = PyNumber_Add(__pyx_t_31, __pyx_t_9); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_41) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_41, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1402, __pyx_L1_error)
      __pyx_t_47 = ((PyArrayObject *)__pyx_t_41);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iind.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iind.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iind.rcbuffer->pybuffer, (PyObject*)__pyx_v_iind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_iind.diminfo[0].strides = __pyx_pybuffernd_iind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iind.diminfo[0].shape = __pyx_pybuffernd_iind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1402, __pyx_L1_error)
      }
      __pyx_t_47 = 0;
      __pyx_v_iind = ((PyArrayObject *)__pyx_t_41);
      __pyx_t_41 = 0;
+1403:             indin = Path(VPoly.T).contains_points(ptsrz.T, transform=None,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Path); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_49 = __pyx_v_VPoly;
      __PYX_INC_MEMVIEW(&__pyx_t_49, 1);
      if (unlikely(__pyx_memslice_transpose(&__pyx_t_49) == 0)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __pyx_t_31 = __pyx_memoryview_fromslice(__pyx_t_49, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __PYX_XDEC_MEMVIEW(&__pyx_t_49, 1);
      __pyx_t_49.memview = NULL;
      __pyx_t_49.data = NULL;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_41 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_2, __pyx_t_31) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_31);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_t_41 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_ptsrz), __pyx_n_s_T); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __pyx_t_31 = PyTuple_New(1); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_GIVEREF(__pyx_t_41);
      PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_41);
      __pyx_t_41 = 0;
      __pyx_t_41 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 1403, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_41, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 1403, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_31, __pyx_t_41); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1403, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_v_indin = __pyx_t_2;
      __pyx_t_2 = 0;
 1404:                                                   radius=0.0)
+1405:             if np.any(indin):
      __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_np); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_any); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_t_41 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
        __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_31);
        if (likely(__pyx_t_41)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
          __Pyx_INCREF(__pyx_t_41);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_31, function);
        }
      }
      __pyx_t_2 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_31, __pyx_t_41, __pyx_v_indin) : __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_v_indin);
      __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1405, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_22) {
/* … */
      }
+1406:                 ptsrz = ptsrz[:,indin] if indin.sum()>1 \
        __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1406, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_41))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_41);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_41);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_41, function);
          }
        }
        __pyx_t_31 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_41);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1406, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        __pyx_t_41 = PyObject_RichCompare(__pyx_t_31, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_41); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1406, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_41); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1406, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        if (__pyx_t_22) {
          __pyx_t_41 = PyTuple_New(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1406, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_41);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_41, 1, __pyx_v_indin);
          __pyx_t_31 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_t_41); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1406, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_31);
          __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
          if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1406, __pyx_L1_error)
          __pyx_t_2 = __pyx_t_31;
          __pyx_t_31 = 0;
        } else {
+1407:                   else ptsrz[:,indin].reshape((2,1))
          __pyx_t_41 = PyTuple_New(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1407, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_41);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_41, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_41, 1, __pyx_v_indin);
          __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_t_41); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1407, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
          __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_reshape); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1407, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_41);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_41))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_41);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_41);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_41, function);
            }
          }
          __pyx_t_31 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_41, __pyx_t_9, __pyx_tuple__39) : __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_tuple__39);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1407, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_31);
          __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
          if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1407, __pyx_L1_error)
          __pyx_t_2 = __pyx_t_31;
          __pyx_t_31 = 0;
        }
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_2), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ptsrz.rcbuffer->pybuffer, (PyObject*)__pyx_v_ptsrz, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
            }
            __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
          }
          __pyx_pybuffernd_ptsrz.diminfo[0].strides = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ptsrz.diminfo[0].shape = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ptsrz.diminfo[1].strides = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ptsrz.diminfo[1].shape = __pyx_pybuffernd_ptsrz.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1406, __pyx_L1_error)
        }
        __Pyx_DECREF_SET(__pyx_v_ptsrz, ((PyArrayObject *)__pyx_t_2));
        __pyx_t_2 = 0;
+1408:                 iindF = iind[indin]
        __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_iind), __pyx_v_indin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1408, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1408, __pyx_L1_error)
        __pyx_t_47 = ((PyArrayObject *)__pyx_t_2);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_iindF.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iindF.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_iindF.rcbuffer->pybuffer, (PyObject*)__pyx_v_iindF, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
            }
            __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
          }
          __pyx_pybuffernd_iindF.diminfo[0].strides = __pyx_pybuffernd_iindF.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_iindF.diminfo[0].shape = __pyx_pybuffernd_iindF.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1408, __pyx_L1_error)
        }
        __pyx_t_47 = 0;
        __pyx_v_iindF = ((PyArrayObject *)__pyx_t_2);
        __pyx_t_2 = 0;
+1409:                 dsF = dR0r*dZ0r*np.ones((indin.sum(),))
        __pyx_t_2 = PyFloat_FromDouble((__pyx_v_dR0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_np); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_ones); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_8 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_41 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_41);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_41);
        __pyx_t_41 = 0;
        __pyx_t_41 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_41)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_41);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_31 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_41, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_31); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1409, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1409, __pyx_L1_error)
        __pyx_t_42 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dsF.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dsF.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dsF.rcbuffer->pybuffer, (PyObject*)__pyx_v_dsF, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
            }
            __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
          }
          __pyx_pybuffernd_dsF.diminfo[0].strides = __pyx_pybuffernd_dsF.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dsF.diminfo[0].shape = __pyx_pybuffernd_dsF.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1409, __pyx_L1_error)
        }
        __pyx_t_42 = 0;
        __pyx_v_dsF = ((PyArrayObject *)__pyx_t_9);
        __pyx_t_9 = 0;
 1410: 
 1411:         # First face
+1412:         if Faces[0]:
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_Faces, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1412, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1412, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_22) {
/* … */
    }
+1413:             if Out.lower()=='(x,y,z)':
      __pyx_t_9 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1413, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_22 = (__Pyx_PyString_Equals(__pyx_t_9, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1413, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (__pyx_t_22) {
/* … */
        goto __pyx_L19;
      }
+1414:                 pts = np.array([ptsrz[0,:]*Ccos(phiMinMax[0]+Dphi),
        __Pyx_GetModuleGlobalName(__pyx_t_31, __pyx_n_s_np); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_31, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        __pyx_t_31 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __pyx_t_50 = 0;
        __pyx_t_3 = PyFloat_FromDouble(cos(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_50)) ))) + __pyx_v_Dphi))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_41 = PyNumber_Multiply(__pyx_t_31, __pyx_t_3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
        __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_41);
        PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_41);
        __Pyx_GIVEREF(__pyx_t_8);
        PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_31);
        PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_31);
        __pyx_t_41 = 0;
        __pyx_t_8 = 0;
        __pyx_t_31 = 0;
        __pyx_t_31 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_31 = PyMethod_GET_SELF(__pyx_t_2);
          if (likely(__pyx_t_31)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_31);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_2, function);
          }
        }
        __pyx_t_9 = (__pyx_t_31) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_31, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_31); __pyx_t_31 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1414, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1414, __pyx_L1_error)
        __pyx_t_48 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
            }
            __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
          }
          __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1414, __pyx_L1_error)
        }
        __pyx_t_48 = 0;
        __pyx_v_pts = ((PyArrayObject *)__pyx_t_9);
        __pyx_t_9 = 0;
+1415:                                 ptsrz[0,:]*Csin(phiMinMax[0]+Dphi),
        __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1415, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_51 = 0;
        __pyx_t_31 = PyFloat_FromDouble(sin(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_51)) ))) + __pyx_v_Dphi))); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1415, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __pyx_t_8 = PyNumber_Multiply(__pyx_t_3, __pyx_t_31); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1415, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
+1416:                                 ptsrz[1,:]])
        __pyx_t_31 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__42); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1416, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
 1417:             else:
+1418:                 pts = np.array([ptsrz[0,:],
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
/* … */
        __pyx_t_41 = PyList_New(3); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_GIVEREF(__pyx_t_2);
        PyList_SET_ITEM(__pyx_t_41, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_31);
        PyList_SET_ITEM(__pyx_t_41, 1, __pyx_t_31);
        __Pyx_GIVEREF(__pyx_t_1);
        PyList_SET_ITEM(__pyx_t_41, 2, __pyx_t_1);
        __pyx_t_2 = 0;
        __pyx_t_31 = 0;
        __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_41) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_41);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1418, __pyx_L1_error)
        __pyx_t_48 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
            }
            __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
          }
          __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1418, __pyx_L1_error)
        }
        __pyx_t_48 = 0;
        __pyx_v_pts = ((PyArrayObject *)__pyx_t_9);
        __pyx_t_9 = 0;
      }
      __pyx_L19:;
+1419:                                 ptsrz[1,:],
        __pyx_t_31 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__42); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1419, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
+1420:                                 (phiMinMax[0]+Dphi)*np.ones((indin.sum(),))])
        __pyx_t_52 = 0;
        __pyx_t_8 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_52)) ))) + __pyx_v_Dphi)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
        if (unlikely(!__pyx_v_indin)) { __Pyx_RaiseUnboundLocalError("indin"); __PYX_ERR(0, 1420, __pyx_L1_error) }
        __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __pyx_t_54 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_53))) {
          __pyx_t_54 = PyMethod_GET_SELF(__pyx_t_53);
          if (likely(__pyx_t_54)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
            __Pyx_INCREF(__pyx_t_54);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_53, function);
          }
        }
        __pyx_t_33 = (__pyx_t_54) ? __Pyx_PyObject_CallOneArg(__pyx_t_53, __pyx_t_54) : __Pyx_PyObject_CallNoArg(__pyx_t_53);
        __Pyx_XDECREF(__pyx_t_54); __pyx_t_54 = 0;
        if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
        __pyx_t_53 = PyTuple_New(1); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __Pyx_GIVEREF(__pyx_t_33);
        PyTuple_SET_ITEM(__pyx_t_53, 0, __pyx_t_33);
        __pyx_t_33 = 0;
        __pyx_t_33 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_33)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_33);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_41 = (__pyx_t_33) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_33, __pyx_t_53) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_53);
        __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
        if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyNumber_Multiply(__pyx_t_8, __pyx_t_41); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1420, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+1421:             LPts.append( pts )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LPts, ((PyObject *)__pyx_v_pts)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1421, __pyx_L1_error)
+1422:             Lind.append( iindF )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_Lind, ((PyObject *)__pyx_v_iindF)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1422, __pyx_L1_error)
+1423:             LdS.append( dsF )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LdS, ((PyObject *)__pyx_v_dsF)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1423, __pyx_L1_error)
 1424: 
 1425:         # Main body
+1426:         PtsM, dSM,\
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_53) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_53, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    if (!(likely(((__pyx_t_54) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_54, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1426, __pyx_L1_error)
    __pyx_t_48 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsM, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_PtsM.diminfo[0].strides = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsM.diminfo[0].shape = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsM.diminfo[1].strides = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsM.diminfo[1].shape = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1426, __pyx_L1_error)
    }
    __pyx_t_48 = 0;
    __pyx_v_PtsM = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_31);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer, (PyObject*)__pyx_v_dSM, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_dSM.diminfo[0].strides = __pyx_pybuffernd_dSM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dSM.diminfo[0].shape = __pyx_pybuffernd_dSM.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1426, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dSM = ((PyArrayObject *)__pyx_t_31);
    __pyx_t_31 = 0;
    __pyx_t_47 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indM.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indM.rcbuffer->pybuffer, (PyObject*)__pyx_v_indM, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_indM.diminfo[0].strides = __pyx_pybuffernd_indM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indM.diminfo[0].shape = __pyx_pybuffernd_indM.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1427, __pyx_L1_error)
    }
    __pyx_t_47 = 0;
    __pyx_v_indM = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_47 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1427, __pyx_L1_error)
    }
    __pyx_t_47 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_2);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1428, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dLr = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_8);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1428, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_53);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1429, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_53);
    __pyx_t_53 = 0;
    __pyx_v_nRPhi0 = __pyx_t_33;
    __pyx_t_33 = 0;
    __pyx_t_48 = ((PyArrayObject *)__pyx_t_54);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1430, __pyx_L1_error)
    }
    __pyx_t_48 = 0;
    __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_54);
    __pyx_t_54 = 0;
 1427:           indM, NL,\
 1428:           dLr, Rref,\
 1429:           dRPhir, nRPhi0,\
+1430:           VPbis = _Ves_Smesh_Tor_SubFromD_cython(dL, dRPhi, VPoly,
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Ves_Smesh_Tor_SubFromD_cython); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_41 = PyFloat_FromDouble(__pyx_v_dRPhi); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_31 = PyTuple_New(3); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_31);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_41);
    PyTuple_SET_ITEM(__pyx_t_31, 1, __pyx_t_41);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_31, 2, __pyx_t_1);
    __pyx_t_3 = 0;
    __pyx_t_41 = 0;
    __pyx_t_1 = 0;
/* … */
    __pyx_t_41 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_31, __pyx_t_1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_41))) || (PyList_CheckExact(__pyx_t_41))) {
      PyObject* sequence = __pyx_t_41;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 9)) {
        if (size > 9) __Pyx_RaiseTooManyValuesError(9);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1426, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_31 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
        __pyx_t_53 = PyTuple_GET_ITEM(sequence, 6); 
        __pyx_t_33 = PyTuple_GET_ITEM(sequence, 7); 
        __pyx_t_54 = PyTuple_GET_ITEM(sequence, 8); 
      } else {
        __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_31 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 4); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
        __pyx_t_53 = PyList_GET_ITEM(sequence, 6); 
        __pyx_t_33 = PyList_GET_ITEM(sequence, 7); 
        __pyx_t_54 = PyList_GET_ITEM(sequence, 8); 
      }
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_31);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_53);
      __Pyx_INCREF(__pyx_t_33);
      __Pyx_INCREF(__pyx_t_54);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[9] = {&__pyx_t_1,&__pyx_t_31,&__pyx_t_9,&__pyx_t_3,&__pyx_t_2,&__pyx_t_8,&__pyx_t_53,&__pyx_t_33,&__pyx_t_54};
        for (i=0; i < 9; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1426, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[9] = {&__pyx_t_1,&__pyx_t_31,&__pyx_t_9,&__pyx_t_3,&__pyx_t_2,&__pyx_t_8,&__pyx_t_53,&__pyx_t_33,&__pyx_t_54};
      __pyx_t_56 = PyObject_GetIter(__pyx_t_41); if (unlikely(!__pyx_t_56)) __PYX_ERR(0, 1426, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_56);
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_t_34 = Py_TYPE(__pyx_t_56)->tp_iternext;
      for (index=0; index < 9; index++) {
        PyObject* item = __pyx_t_34(__pyx_t_56); if (unlikely(!item)) goto __pyx_L20_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_34(__pyx_t_56), 9) < 0) __PYX_ERR(0, 1426, __pyx_L1_error)
      __pyx_t_34 = NULL;
      __Pyx_DECREF(__pyx_t_56); __pyx_t_56 = 0;
      goto __pyx_L21_unpacking_done;
      __pyx_L20_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_56); __pyx_t_56 = 0;
      __pyx_t_34 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1426, __pyx_L1_error)
      __pyx_L21_unpacking_done:;
    }
+1431:                                                  DR=DR, DZ=DZ,
    __pyx_t_1 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_DR, __pyx_v_DR) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_DZ, __pyx_v_DZ) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
+1432:                                                  DPhi=[DPhi0,DPhi1],
    __pyx_t_41 = PyList_New(2); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1432, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __Pyx_INCREF(__pyx_v_DPhi0);
    __Pyx_GIVEREF(__pyx_v_DPhi0);
    PyList_SET_ITEM(__pyx_t_41, 0, __pyx_v_DPhi0);
    __Pyx_INCREF(__pyx_v_DPhi1);
    __Pyx_GIVEREF(__pyx_v_DPhi1);
    PyList_SET_ITEM(__pyx_t_41, 1, __pyx_v_DPhi1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_DPhi, __pyx_t_41) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+1433:                                                  DIn=DIn, VIn=VIn,
    __pyx_t_41 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_DIn, __pyx_t_41) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
+1434:                                                  PhiMinMax=phiMinMax,
    __pyx_t_41 = __pyx_memoryview_fromslice(__pyx_v_phiMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1434, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_PhiMinMax, __pyx_t_41) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+1435:                                                  Out=Out, margin=margin)
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_Out, __pyx_v_Out) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    __pyx_t_41 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_margin, __pyx_t_41) < 0) __PYX_ERR(0, 1431, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 1436: 
+1437:         if PtsM.shape[1]>=1:
    __pyx_t_22 = (((__pyx_v_PtsM->dimensions[1]) >= 1) != 0);
    if (__pyx_t_22) {
/* … */
    }
+1438:             if PtsM.shape[1]==1:
      __pyx_t_22 = (((__pyx_v_PtsM->dimensions[1]) == 1) != 0);
      if (__pyx_t_22) {
/* … */
        goto __pyx_L23;
      }
+1439:                 LPts.append(PtsM.reshape((3,1)))
        __pyx_t_54 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_PtsM), __pyx_n_s_reshape); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1439, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_54);
        __pyx_t_33 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_54))) {
          __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_54);
          if (likely(__pyx_t_33)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_54);
            __Pyx_INCREF(__pyx_t_33);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_54, function);
          }
        }
        __pyx_t_41 = (__pyx_t_33) ? __Pyx_PyObject_Call2Args(__pyx_t_54, __pyx_t_33, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_54, __pyx_tuple__49);
        __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
        if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1439, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
        __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_41); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1439, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
 1440:             else:
+1441:                 LPts.append(PtsM)
      /*else*/ {
        __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LPts, ((PyObject *)__pyx_v_PtsM)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1441, __pyx_L1_error)
      }
      __pyx_L23:;
+1442:             Lind.append( indM + NR0*NZ0 )
      __pyx_t_41 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_41);
      __pyx_t_54 = PyNumber_Add(((PyObject *)__pyx_v_indM), __pyx_t_41); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_Lind, __pyx_t_54); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1442, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
+1443:             LdS.append( dSM )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LdS, ((PyObject *)__pyx_v_dSM)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1443, __pyx_L1_error)
 1444: 
 1445:         # Second face
+1446:         if Faces[1]:
    __pyx_t_54 = __Pyx_GetItemInt(__pyx_v_Faces, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __pyx_t_22 = __Pyx_PyObject_IsTrue(__pyx_t_54); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1446, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    if (__pyx_t_22) {
/* … */
    }
+1447:             if Out.lower()=='(x,y,z)':
      __pyx_t_54 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1447, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __pyx_t_22 = (__Pyx_PyString_Equals(__pyx_t_54, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_22 < 0)) __PYX_ERR(0, 1447, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      if (__pyx_t_22) {
/* … */
        goto __pyx_L25;
      }
+1448:                 pts = np.array([ptsrz[0,:]*Ccos(phiMinMax[1]-Dphi),
        __Pyx_GetModuleGlobalName(__pyx_t_41, __pyx_n_s_np); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_41, __pyx_n_s_array); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        __pyx_t_41 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __pyx_t_57 = 1;
        __pyx_t_53 = PyFloat_FromDouble(cos(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_57)) ))) - __pyx_v_Dphi))); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __pyx_t_8 = PyNumber_Multiply(__pyx_t_41, __pyx_t_53); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
/* … */
        __pyx_t_53 = PyList_New(3); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __Pyx_GIVEREF(__pyx_t_8);
        PyList_SET_ITEM(__pyx_t_53, 0, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_2);
        PyList_SET_ITEM(__pyx_t_53, 1, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_41);
        PyList_SET_ITEM(__pyx_t_53, 2, __pyx_t_41);
        __pyx_t_8 = 0;
        __pyx_t_2 = 0;
        __pyx_t_41 = 0;
        __pyx_t_41 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_33))) {
          __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_33);
          if (likely(__pyx_t_41)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_33);
            __Pyx_INCREF(__pyx_t_41);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_33, function);
          }
        }
        __pyx_t_54 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_33, __pyx_t_41, __pyx_t_53) : __Pyx_PyObject_CallOneArg(__pyx_t_33, __pyx_t_53);
        __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
        if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1448, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_54);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
        if (!(likely(((__pyx_t_54) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_54, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1448, __pyx_L1_error)
        __pyx_t_48 = ((PyArrayObject *)__pyx_t_54);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
            }
            __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
          }
          __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1448, __pyx_L1_error)
        }
        __pyx_t_48 = 0;
        __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_54));
        __pyx_t_54 = 0;
+1449:                                 ptsrz[0,:]*Csin(phiMinMax[1]-Dphi),
        __pyx_t_53 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __pyx_t_58 = 1;
        __pyx_t_41 = PyFloat_FromDouble(sin(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_58)) ))) - __pyx_v_Dphi))); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __pyx_t_2 = PyNumber_Multiply(__pyx_t_53, __pyx_t_41); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1449, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
+1450:                                 ptsrz[1,:]])
        __pyx_t_41 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__42); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1450, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
 1451:             else:
+1452:                 pts = np.array([ptsrz[0,:],
      /*else*/ {
        __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
        __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_array); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_53);
        __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
        __pyx_t_33 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__36); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_33);
/* … */
        __pyx_t_8 = PyList_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_33);
        PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_33);
        __Pyx_GIVEREF(__pyx_t_41);
        PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_41);
        __Pyx_GIVEREF(__pyx_t_9);
        PyList_SET_ITEM(__pyx_t_8, 2, __pyx_t_9);
        __pyx_t_33 = 0;
        __pyx_t_41 = 0;
        __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_53))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_53);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_53, function);
          }
        }
        __pyx_t_54 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_53, __pyx_t_9, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_53, __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1452, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_54);
        __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
        if (!(likely(((__pyx_t_54) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_54, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1452, __pyx_L1_error)
        __pyx_t_48 = ((PyArrayObject *)__pyx_t_54);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
          __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_32 < 0)) {
            PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
            }
            __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
          }
          __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1452, __pyx_L1_error)
        }
        __pyx_t_48 = 0;
        __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_54));
        __pyx_t_54 = 0;
      }
      __pyx_L25:;
+1453:                                 ptsrz[1,:],
        __pyx_t_41 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ptsrz), __pyx_tuple__42); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1453, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
+1454:                                 (phiMinMax[1]-Dphi)*np.ones((indin.sum(),))])
        __pyx_t_59 = 1;
        __pyx_t_2 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_59)) ))) - __pyx_v_Dphi)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_v_indin)) { __Pyx_RaiseUnboundLocalError("indin"); __PYX_ERR(0, 1454, __pyx_L1_error) }
        __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_31))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_31);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_31, function);
          }
        }
        __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_31);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        __pyx_t_31 = PyTuple_New(1); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_31);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_31, 0, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_9);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_9, function);
          }
        }
        __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_3, __pyx_t_31) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_31);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyNumber_Multiply(__pyx_t_2, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1454, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+1455:             LPts.append( pts )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LPts, ((PyObject *)__pyx_v_pts)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1455, __pyx_L1_error)
+1456:             Lind.append( iindF + NR0*NZ0 + nRPhi0 )
      __pyx_t_54 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1456, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __pyx_t_53 = PyNumber_Add(((PyObject *)__pyx_v_iindF), __pyx_t_54); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1456, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      __pyx_t_54 = PyNumber_Add(__pyx_t_53, __pyx_v_nRPhi0); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1456, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_Lind, __pyx_t_54); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1456, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
+1457:             LdS.append( dsF )
      __pyx_t_55 = __Pyx_PyList_Append(__pyx_v_LdS, ((PyObject *)__pyx_v_dsF)); if (unlikely(__pyx_t_55 == ((int)-1))) __PYX_ERR(0, 1457, __pyx_L1_error)
 1458: 
 1459:         # Aggregate
+1460:         if len(LPts)==1:
    __pyx_t_36 = PyList_GET_SIZE(__pyx_v_LPts); if (unlikely(__pyx_t_36 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1460, __pyx_L1_error)
    __pyx_t_22 = ((__pyx_t_36 == 1) != 0);
    if (__pyx_t_22) {
/* … */
      goto __pyx_L26;
    }
+1461:             Pts = LPts[0]
      if (!(likely(((PyList_GET_ITEM(__pyx_v_LPts, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LPts, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1461, __pyx_L1_error)
      __pyx_t_54 = PyList_GET_ITEM(__pyx_v_LPts, 0);
      __Pyx_INCREF(__pyx_t_54);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_54), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1461, __pyx_L1_error)
      }
      __pyx_v_Pts = ((PyArrayObject *)__pyx_t_54);
      __pyx_t_54 = 0;
+1462:             ind = Lind[0]
      if (!(likely(((PyList_GET_ITEM(__pyx_v_Lind, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_Lind, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1462, __pyx_L1_error)
      __pyx_t_54 = PyList_GET_ITEM(__pyx_v_Lind, 0);
      __Pyx_INCREF(__pyx_t_54);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_54), &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1462, __pyx_L1_error)
      }
      __pyx_v_ind = ((PyArrayObject *)__pyx_t_54);
      __pyx_t_54 = 0;
+1463:             dS = LdS[0]
      if (!(likely(((PyList_GET_ITEM(__pyx_v_LdS, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LdS, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1463, __pyx_L1_error)
      __pyx_t_54 = PyList_GET_ITEM(__pyx_v_LdS, 0);
      __Pyx_INCREF(__pyx_t_54);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_54), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1463, __pyx_L1_error)
      }
      __pyx_v_dS = ((PyArrayObject *)__pyx_t_54);
      __pyx_t_54 = 0;
 1464:         else:
+1465:             Pts = np.concatenate(tuple(LPts),axis=1)
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_54, __pyx_n_s_np); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_54, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      __pyx_t_54 = PyList_AsTuple(__pyx_v_LPts); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_54);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_54);
      __pyx_t_54 = 0;
      __pyx_t_54 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      if (PyDict_SetItem(__pyx_t_54, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 1465, __pyx_L1_error)
      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_53, __pyx_t_8, __pyx_t_54); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1465, __pyx_L1_error)
      __pyx_t_48 = ((PyArrayObject *)__pyx_t_9);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1465, __pyx_L1_error)
      }
      __pyx_t_48 = 0;
      __pyx_v_Pts = ((PyArrayObject *)__pyx_t_9);
      __pyx_t_9 = 0;
+1466:             ind = np.concatenate(tuple(Lind)).astype(int)
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyList_AsTuple(__pyx_v_Lind); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_41 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_53))) {
        __pyx_t_41 = PyMethod_GET_SELF(__pyx_t_53);
        if (likely(__pyx_t_41)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
          __Pyx_INCREF(__pyx_t_41);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_53, function);
        }
      }
      __pyx_t_54 = (__pyx_t_41) ? __Pyx_PyObject_Call2Args(__pyx_t_53, __pyx_t_41, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_53, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_41); __pyx_t_41 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_54, __pyx_n_s_astype); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      __pyx_t_54 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_53))) {
        __pyx_t_54 = PyMethod_GET_SELF(__pyx_t_53);
        if (likely(__pyx_t_54)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
          __Pyx_INCREF(__pyx_t_54);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_53, function);
        }
      }
      __pyx_t_9 = (__pyx_t_54) ? __Pyx_PyObject_Call2Args(__pyx_t_53, __pyx_t_54, ((PyObject *)(&PyInt_Type))) : __Pyx_PyObject_CallOneArg(__pyx_t_53, ((PyObject *)(&PyInt_Type)));
      __Pyx_XDECREF(__pyx_t_54); __pyx_t_54 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1466, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1466, __pyx_L1_error)
      __pyx_t_47 = ((PyArrayObject *)__pyx_t_9);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
          }
          __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
        }
        __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1466, __pyx_L1_error)
      }
      __pyx_t_47 = 0;
      __pyx_v_ind = ((PyArrayObject *)__pyx_t_9);
      __pyx_t_9 = 0;
+1467:             dS = np.concatenate(tuple(LdS))
      __Pyx_GetModuleGlobalName(__pyx_t_53, __pyx_n_s_np); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_53, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_54);
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      __pyx_t_53 = PyList_AsTuple(__pyx_v_LdS); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_53);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_54))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_54);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_54);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_54, function);
        }
      }
      __pyx_t_9 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_54, __pyx_t_8, __pyx_t_53) : __Pyx_PyObject_CallOneArg(__pyx_t_54, __pyx_t_53);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1467, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1467, __pyx_L1_error)
      __pyx_t_42 = ((PyArrayObject *)__pyx_t_9);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
        __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
        if (unlikely(__pyx_t_32 < 0)) {
          PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
          }
          __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
        }
        __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
        if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1467, __pyx_L1_error)
      }
      __pyx_t_42 = 0;
      __pyx_v_dS = ((PyArrayObject *)__pyx_t_9);
      __pyx_t_9 = 0;
    }
    __pyx_L26:;
 1468: 
 1469:     else:
+1470:         Pts, dS, ind, NL, Rref = np.ones((3,0)), np.ones((0,)),\
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_54, __pyx_n_s_np); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_54, __pyx_n_s_ones); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_53);
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    __pyx_t_54 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_53))) {
      __pyx_t_54 = PyMethod_GET_SELF(__pyx_t_53);
      if (likely(__pyx_t_54)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
        __Pyx_INCREF(__pyx_t_54);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_53, function);
      }
    }
    __pyx_t_9 = (__pyx_t_54) ? __Pyx_PyObject_Call2Args(__pyx_t_53, __pyx_t_54, __pyx_tuple__50) : __Pyx_PyObject_CallOneArg(__pyx_t_53, __pyx_tuple__50);
    __Pyx_XDECREF(__pyx_t_54); __pyx_t_54 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_54, __pyx_n_s_np); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_54, __pyx_n_s_ones); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    __pyx_t_54 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_54 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_54)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_54);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_53 = (__pyx_t_54) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_54, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_54); __pyx_t_54 = 0;
    if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_53);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_53) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_53, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1470, __pyx_L1_error)
+1471:           np.ones((0,),dtype=int), np.ones((0,),dtype=int),\
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1471, __pyx_L1_error)
    __pyx_t_41 = __Pyx_PyObject_Call(__pyx_t_54, __pyx_tuple__54, __pyx_t_8); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_41) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_41, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1471, __pyx_L1_error)
    __pyx_t_33 = __Pyx_PyObject_Call(__pyx_t_54, __pyx_tuple__54, __pyx_t_8); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_33) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_33, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1471, __pyx_L1_error)
/* … */
  __pyx_tuple__54 = PyTuple_Pack(1, __pyx_tuple__51); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(0, 1471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__54);
  __Pyx_GIVEREF(__pyx_tuple__54);
+1472:           np.nan*np.ones((VPoly.shape[1]-1,))
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nan); if (unlikely(!__pyx_t_54)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_54);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_31);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyInt_FromSsize_t(((__pyx_v_VPoly.shape[1]) - 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_31))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_31);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_31, function);
      }
    }
    __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_31, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
    __pyx_t_31 = PyNumber_Multiply(__pyx_t_54, __pyx_t_8); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1472, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_31);
    __Pyx_DECREF(__pyx_t_54); __pyx_t_54 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1472, __pyx_L1_error)
    __pyx_t_48 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
    }
    __pyx_t_48 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_53);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_53);
    __pyx_t_53 = 0;
    __pyx_t_47 = ((PyArrayObject *)__pyx_t_41);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
    }
    __pyx_t_47 = 0;
    __pyx_v_ind = ((PyArrayObject *)__pyx_t_41);
    __pyx_t_41 = 0;
    __pyx_t_47 = ((PyArrayObject *)__pyx_t_33);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_47, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
    }
    __pyx_t_47 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_33);
    __pyx_t_33 = 0;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_31);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1470, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_31);
    __pyx_t_31 = 0;
+1473:         dLr, dR0r, dZ0r, dRPhir, VPbis = np.ones((0,)), 0., 0.,\
    __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_ones); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
    __pyx_t_33 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_41))) {
      __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_41);
      if (likely(__pyx_t_33)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_41);
        __Pyx_INCREF(__pyx_t_33);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_41, function);
      }
    }
    __pyx_t_31 = (__pyx_t_33) ? __Pyx_PyObject_Call2Args(__pyx_t_41, __pyx_t_33, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_41, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
    if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_31);
    __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
    if (!(likely(((__pyx_t_31) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_31, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1473, __pyx_L1_error)
    __pyx_t_26 = 0.;
    __pyx_t_27 = 0.;
+1474:           np.ones((0,)), np.asarray(VPoly)
    __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_ones); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_53);
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
    __pyx_t_33 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_53))) {
      __pyx_t_33 = PyMethod_GET_SELF(__pyx_t_53);
      if (likely(__pyx_t_33)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_53);
        __Pyx_INCREF(__pyx_t_33);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_53, function);
      }
    }
    __pyx_t_41 = (__pyx_t_33) ? __Pyx_PyObject_Call2Args(__pyx_t_53, __pyx_t_33, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_53, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_33); __pyx_t_33 = 0;
    if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_41);
    __Pyx_DECREF(__pyx_t_53); __pyx_t_53 = 0;
    if (!(likely(((__pyx_t_41) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_41, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_33, __pyx_n_s_np); if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_33, __pyx_n_s_asarray); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
    __pyx_t_33 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_33)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_33);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_53 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_8, __pyx_t_33) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_33);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_33); __pyx_t_33 = 0;
    if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_53);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_53) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_53, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1474, __pyx_L1_error)
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_31);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1473, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dLr = ((PyArrayObject *)__pyx_t_31);
    __pyx_t_31 = 0;
    __pyx_v_dR0r = __pyx_t_26;
    __pyx_v_dZ0r = __pyx_t_27;
    __pyx_t_42 = ((PyArrayObject *)__pyx_t_41);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_42, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_46, &__pyx_t_45, &__pyx_t_44);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_46); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_44);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_46, __pyx_t_45, __pyx_t_44);
        }
        __pyx_t_46 = __pyx_t_45 = __pyx_t_44 = 0;
      }
      __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1473, __pyx_L1_error)
    }
    __pyx_t_42 = 0;
    __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_41);
    __pyx_t_41 = 0;
    __pyx_t_48 = ((PyArrayObject *)__pyx_t_53);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
      __pyx_t_32 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_48, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_32 < 0)) {
        PyErr_Fetch(&__pyx_t_44, &__pyx_t_45, &__pyx_t_46);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_44); Py_XDECREF(__pyx_t_45); Py_XDECREF(__pyx_t_46);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_44, __pyx_t_45, __pyx_t_46);
        }
        __pyx_t_44 = __pyx_t_45 = __pyx_t_46 = 0;
      }
      __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_32 < 0)) __PYX_ERR(0, 1473, __pyx_L1_error)
    }
    __pyx_t_48 = 0;
    __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_53);
    __pyx_t_53 = 0;
  }
  __pyx_L7:;
 1475: 
+1476:     return Pts, dS, ind, NL, dLr, Rref, dR0r, dZ0r, dRPhir, VPbis
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_53 = PyFloat_FromDouble(__pyx_v_dR0r); if (unlikely(!__pyx_t_53)) __PYX_ERR(0, 1476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_53);
  __pyx_t_41 = PyFloat_FromDouble(__pyx_v_dZ0r); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 1476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_41);
  __pyx_t_31 = PyTuple_New(10); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 1476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_31);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_31, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_31, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_ind));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
  PyTuple_SET_ITEM(__pyx_t_31, 2, ((PyObject *)__pyx_v_ind));
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_31, 3, ((PyObject *)__pyx_v_NL));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_31, 4, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_31, 5, ((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(__pyx_t_53);
  PyTuple_SET_ITEM(__pyx_t_31, 6, __pyx_t_53);
  __Pyx_GIVEREF(__pyx_t_41);
  PyTuple_SET_ITEM(__pyx_t_31, 7, __pyx_t_41);
  __Pyx_INCREF(((PyObject *)__pyx_v_dRPhir));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dRPhir));
  PyTuple_SET_ITEM(__pyx_t_31, 8, ((PyObject *)__pyx_v_dRPhir));
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_31, 9, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_53 = 0;
  __pyx_t_41 = 0;
  __pyx_r = __pyx_t_31;
  __pyx_t_31 = 0;
  goto __pyx_L0;
 1477: 
 1478: 
 1479: 
 1480: @cython.cdivision(True)
 1481: @cython.wraparound(False)
 1482: @cython.boundscheck(False)
+1483: def _Ves_Smesh_TorStruct_SubFromInd_cython(double[::1] PhiMinMax, double dL,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_39_Ves_Smesh_TorStruct_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_38_Ves_Smesh_TorStruct_SubFromInd_cython[] = " Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi)\n    for the desired resolution (dR,dZ,dRphi) ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_39_Ves_Smesh_TorStruct_SubFromInd_cython = {"_Ves_Smesh_TorStruct_SubFromInd_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_39_Ves_Smesh_TorStruct_SubFromInd_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_38_Ves_Smesh_TorStruct_SubFromInd_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_39_Ves_Smesh_TorStruct_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_PhiMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  double __pyx_v_dRPhi;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_ind = 0;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_Out = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_TorStruct_SubFromInd_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_PhiMinMax,&__pyx_n_s_dL,&__pyx_n_s_dRPhi,&__pyx_n_s_VPoly,&__pyx_n_s_ind,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_Out,&__pyx_n_s_margin,0};
    PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_38_Ves_Smesh_TorStruct_SubFromInd_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_PhiMinMax, double __pyx_v_dL, double __pyx_v_dRPhi, __Pyx_memviewslice __pyx_v_VPoly, PyArrayObject *__pyx_v_ind, double __pyx_v_DIn, PyObject *__pyx_v_VIn, PyObject *__pyx_v_Out, double __pyx_v_margin) {
  double __pyx_v_Dphi;
  double __pyx_v_dR0r;
  double __pyx_v_dZ0r;
  int __pyx_v_NR0;
  int __pyx_v_NZ0;
  __Pyx_memviewslice __pyx_v_phiMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_R0 = 0;
  PyArrayObject *__pyx_v_Z0 = 0;
  PyArrayObject *__pyx_v_dSM = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_dRPhir = 0;
  PyArrayObject *__pyx_v_dS = 0;
  CYTHON_UNUSED PyArrayObject *__pyx_v_bla = 0;
  PyArrayObject *__pyx_v_indR0 = 0;
  PyArrayObject *__pyx_v_indZ0 = 0;
  CYTHON_UNUSED PyArrayObject *__pyx_v_indM = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyArrayObject *__pyx_v_pts = 0;
  PyArrayObject *__pyx_v_PtsM = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_Pts = 0;
  PyObject *__pyx_v_LPts = 0;
  PyObject *__pyx_v_LdS = 0;
  CYTHON_UNUSED PyObject *__pyx_v_Lind = 0;
  CYTHON_UNUSED PyObject *__pyx_v_nRPhi0 = NULL;
  PyObject *__pyx_v_ii = NULL;
  Py_ssize_t __pyx_v_nii;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsM;
  __Pyx_Buffer __pyx_pybuffer_PtsM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_R0;
  __Pyx_Buffer __pyx_pybuffer_R0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Z0;
  __Pyx_Buffer __pyx_pybuffer_Z0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_bla;
  __Pyx_Buffer __pyx_pybuffer_bla;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dRPhir;
  __Pyx_Buffer __pyx_pybuffer_dRPhir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dSM;
  __Pyx_Buffer __pyx_pybuffer_dSM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indM;
  __Pyx_Buffer __pyx_pybuffer_indM;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indR0;
  __Pyx_Buffer __pyx_pybuffer_indR0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ0;
  __Pyx_Buffer __pyx_pybuffer_indZ0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pts;
  __Pyx_Buffer __pyx_pybuffer_pts;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_TorStruct_SubFromInd_cython", 0);
  __pyx_pybuffer_R0.pybuffer.buf = NULL;
  __pyx_pybuffer_R0.refcount = 0;
  __pyx_pybuffernd_R0.data = NULL;
  __pyx_pybuffernd_R0.rcbuffer = &__pyx_pybuffer_R0;
  __pyx_pybuffer_Z0.pybuffer.buf = NULL;
  __pyx_pybuffer_Z0.refcount = 0;
  __pyx_pybuffernd_Z0.data = NULL;
  __pyx_pybuffernd_Z0.rcbuffer = &__pyx_pybuffer_Z0;
  __pyx_pybuffer_dSM.pybuffer.buf = NULL;
  __pyx_pybuffer_dSM.refcount = 0;
  __pyx_pybuffernd_dSM.data = NULL;
  __pyx_pybuffernd_dSM.rcbuffer = &__pyx_pybuffer_dSM;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_dRPhir.pybuffer.buf = NULL;
  __pyx_pybuffer_dRPhir.refcount = 0;
  __pyx_pybuffernd_dRPhir.data = NULL;
  __pyx_pybuffernd_dRPhir.rcbuffer = &__pyx_pybuffer_dRPhir;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_bla.pybuffer.buf = NULL;
  __pyx_pybuffer_bla.refcount = 0;
  __pyx_pybuffernd_bla.data = NULL;
  __pyx_pybuffernd_bla.rcbuffer = &__pyx_pybuffer_bla;
  __pyx_pybuffer_indR0.pybuffer.buf = NULL;
  __pyx_pybuffer_indR0.refcount = 0;
  __pyx_pybuffernd_indR0.data = NULL;
  __pyx_pybuffernd_indR0.rcbuffer = &__pyx_pybuffer_indR0;
  __pyx_pybuffer_indZ0.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ0.refcount = 0;
  __pyx_pybuffernd_indZ0.data = NULL;
  __pyx_pybuffernd_indZ0.rcbuffer = &__pyx_pybuffer_indZ0;
  __pyx_pybuffer_indM.pybuffer.buf = NULL;
  __pyx_pybuffer_indM.refcount = 0;
  __pyx_pybuffernd_indM.data = NULL;
  __pyx_pybuffernd_indM.rcbuffer = &__pyx_pybuffer_indM;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
  __pyx_pybuffer_pts.pybuffer.buf = NULL;
  __pyx_pybuffer_pts.refcount = 0;
  __pyx_pybuffernd_pts.data = NULL;
  __pyx_pybuffernd_pts.rcbuffer = &__pyx_pybuffer_pts;
  __pyx_pybuffer_PtsM.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsM.refcount = 0;
  __pyx_pybuffernd_PtsM.data = NULL;
  __pyx_pybuffernd_PtsM.rcbuffer = &__pyx_pybuffer_PtsM;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 1483, __pyx_L1_error)
  }
  __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bla.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_TorStruct_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bla.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __pyx_L2:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_phiMinMax, 1);
  __Pyx_XDECREF((PyObject *)__pyx_v_R0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Z0);
  __Pyx_XDECREF((PyObject *)__pyx_v_dSM);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_dRPhir);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_bla);
  __Pyx_XDECREF((PyObject *)__pyx_v_indR0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indM);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF((PyObject *)__pyx_v_pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsM);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF(__pyx_v_LPts);
  __Pyx_XDECREF(__pyx_v_LdS);
  __Pyx_XDECREF(__pyx_v_Lind);
  __Pyx_XDECREF(__pyx_v_nRPhi0);
  __Pyx_XDECREF(__pyx_v_ii);
  __PYX_XDEC_MEMVIEW(&__pyx_v_PhiMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__196 = PyTuple_Pack(44, __pyx_n_s_PhiMinMax, __pyx_n_s_dL, __pyx_n_s_dRPhi, __pyx_n_s_VPoly, __pyx_n_s_ind, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_Out, __pyx_n_s_margin, __pyx_n_s_Dphi, __pyx_n_s_dR0r, __pyx_n_s_dZ0r, __pyx_n_s_NR0, __pyx_n_s_NZ0, __pyx_n_s_R0n, __pyx_n_s_Z0n, __pyx_n_s_NRPhi0, __pyx_n_s_phiMinMax, __pyx_n_s_R0, __pyx_n_s_Z0, __pyx_n_s_dsF, __pyx_n_s_dSM, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_dRPhir, __pyx_n_s_dS, __pyx_n_s_bla, __pyx_n_s_indR0, __pyx_n_s_indZ0, __pyx_n_s_iind, __pyx_n_s_iindF, __pyx_n_s_indM, __pyx_n_s_NL, __pyx_n_s_ptsrz, __pyx_n_s_pts, __pyx_n_s_PtsM, __pyx_n_s_VPbis, __pyx_n_s_Pts, __pyx_n_s_LPts, __pyx_n_s_LdS, __pyx_n_s_Lind, __pyx_n_s_nRPhi0, __pyx_n_s_ii, __pyx_n_s_nii); if (unlikely(!__pyx_tuple__196)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__196);
  __Pyx_GIVEREF(__pyx_tuple__196);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_39_Ves_Smesh_TorStruct_SubFromInd_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_TorStruct_SubFromInd, __pyx_t_1) < 0) __PYX_ERR(0, 1483, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__197 = (PyObject*)__Pyx_PyCode_New(9, 0, 44, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__196, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_TorStruct_SubFromInd, 1483, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__197)) __PYX_ERR(0, 1483, __pyx_L1_error)
 1484:                                            double dRPhi, double[:,::1] VPoly,
 1485:                                            np.ndarray[long,ndim=1] ind,
+1486:                                            double DIn=0., VIn=None,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject*)__pyx_kp_s_X_Y_Z);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_PhiMinMax)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromInd_cython", 0, 5, 9, 1); __PYX_ERR(0, 1483, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dRPhi)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromInd_cython", 0, 5, 9, 2); __PYX_ERR(0, 1483, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromInd_cython", 0, 5, 9, 3); __PYX_ERR(0, 1483, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromInd_cython", 0, 5, 9, 4); __PYX_ERR(0, 1483, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Out);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[8] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_TorStruct_SubFromInd_cython") < 0)) __PYX_ERR(0, 1483, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_PhiMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_PhiMinMax.memview)) __PYX_ERR(0, 1483, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1483, __pyx_L3_error)
    __pyx_v_dRPhi = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dRPhi == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1484, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1484, __pyx_L3_error)
    __pyx_v_ind = ((PyArrayObject *)values[4]);
    if (values[5]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1486, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[6];
    __pyx_v_Out = ((PyObject*)values[7]);
    if (values[8]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1488, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__55;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_TorStruct_SubFromInd_cython", 0, 5, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1483, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_TorStruct_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ind), __pyx_ptype_5numpy_ndarray, 1, "ind", 0))) __PYX_ERR(0, 1485, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Out), (&PyString_Type), 1, "Out", 1))) __PYX_ERR(0, 1487, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_38_Ves_Smesh_TorStruct_SubFromInd_cython(__pyx_self, __pyx_v_PhiMinMax, __pyx_v_dL, __pyx_v_dRPhi, __pyx_v_VPoly, __pyx_v_ind, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_Out, __pyx_v_margin);
 1487:                                            str Out='(X,Y,Z)',
+1488:                                            double margin=_VSMALL):
  __pyx_k__55 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1489:     """ Return the desired surfacic submesh indicated by the limits (DR,DZ,DPhi)
 1490:     for the desired resolution (dR,dZ,dRphi) """
 1491:     cdef double Dphi, dR0r, dZ0r
 1492:     cdef int NR0, NZ0, R0n, Z0n, NRPhi0
+1493:     cdef double[::1] phiMinMax = np.array([Catan2(Csin(PhiMinMax[0]),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = 0;
/* … */
  __pyx_t_2 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_4)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_5)) )))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
/* … */
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_2);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
  __pyx_t_2 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_8, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 1493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_phiMinMax = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+1494:                                                   Ccos(PhiMinMax[0])),
  __pyx_t_5 = 0;
+1495:                                            Catan2(Csin(PhiMinMax[1]),
  __pyx_t_6 = 1;
/* … */
  __pyx_t_8 = PyFloat_FromDouble(atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_6)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_PhiMinMax.data) + __pyx_t_7)) )))))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
+1496:                                                   Ccos(PhiMinMax[1]))])
  __pyx_t_7 = 1;
 1497:     cdef np.ndarray[double, ndim=1] R0, Z0, dsF, dSM, dLr, Rref, dRPhir, dS
 1498:     cdef np.ndarray[long,ndim=1] bla, indR0, indZ0, iind, iindF, indM, NL
 1499:     cdef np.ndarray[double,ndim=2] ptsrz, pts, PtsM, VPbis, Pts
+1500:     cdef list LPts=[], LdS=[], Lind=[]
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LPts = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_LdS = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_Lind = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
 1501: 
 1502:     # Pre-format input
 1503:     # Required distance effective at max R
+1504:     Dphi = DIn/np.max(VPoly[0,:]) if DIn!=0. else 0.
  if (((__pyx_v_DIn != 0.) != 0)) {
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_max); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10.data = __pyx_v_VPoly.data;
    __pyx_t_10.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1504, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_2, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1504, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_11 = __pyx_t_12;
  } else {
    __pyx_t_11 = 0.;
  }
  __pyx_v_Dphi = __pyx_t_11;
 1505: 
 1506:     # Get the basic meshes for the faces
+1507:     R0, dR0r, bla, NR0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[0,:]),
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10.data = __pyx_v_VPoly.data;
  __pyx_t_10.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1507, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_1 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
/* … */
  __pyx_t_14 = PyList_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_13);
  PyList_SET_ITEM(__pyx_t_14, 1, __pyx_t_13);
  __pyx_t_1 = 0;
  __pyx_t_13 = 0;
  __pyx_t_13 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_13)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_13);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_13, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_14);
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
  __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_9);
  __pyx_t_3 = 0;
  __pyx_t_9 = 0;
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_14, __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1507, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_13);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_9,&__pyx_t_14,&__pyx_t_8,&__pyx_t_13};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1507, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_9,&__pyx_t_14,&__pyx_t_8,&__pyx_t_13};
    __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1507, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_1)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_16(__pyx_t_1); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1507, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1507, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1507, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_14); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1507, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyInt_As_int(__pyx_t_13); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1507, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_9);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_R0.rcbuffer->pybuffer);
    __pyx_t_19 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_19 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_R0.rcbuffer->pybuffer, (PyObject*)__pyx_v_R0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_R0.diminfo[0].strides = __pyx_pybuffernd_R0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_R0.diminfo[0].shape = __pyx_pybuffernd_R0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 1507, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_R0 = ((PyArrayObject *)__pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_v_dR0r = __pyx_t_11;
  __pyx_t_23 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bla.rcbuffer->pybuffer);
    __pyx_t_19 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bla.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_19 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bla.rcbuffer->pybuffer, (PyObject*)__pyx_v_bla, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_bla.diminfo[0].strides = __pyx_pybuffernd_bla.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bla.diminfo[0].shape = __pyx_pybuffernd_bla.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 1507, __pyx_L1_error)
  }
  __pyx_t_23 = 0;
  __pyx_v_bla = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_NR0 = __pyx_t_17;
+1508:                                                             np.max(VPoly[0,:])]),
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_max); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10.data = __pyx_v_VPoly.data;
  __pyx_t_10.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1508, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_13 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+1509:                                                   dL, DL=None, Lim=True,
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
/* … */
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 1509, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1509, __pyx_L1_error)
+1510:                                                   margin=margin)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_9, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 1509, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1511:     Z0, dZ0r, bla, NZ0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[1,:]),
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_min); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_10.data = __pyx_v_VPoly.data;
  __pyx_t_10.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1511, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_8 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_13 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_14);
  __pyx_t_13 = 0;
  __pyx_t_14 = 0;
/* … */
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_13))) || (PyList_CheckExact(__pyx_t_13))) {
    PyObject* sequence = __pyx_t_13;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1511, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_14 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_2,&__pyx_t_3,&__pyx_t_1};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1511, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_2,&__pyx_t_3,&__pyx_t_1};
    __pyx_t_8 = PyObject_GetIter(__pyx_t_13); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_8)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_16(__pyx_t_8); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_8), 4) < 0) __PYX_ERR(0, 1511, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1511, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1511, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1511, __pyx_L1_error)
  __pyx_t_17 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1511, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_14);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __pyx_t_19 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_19 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_Z0.diminfo[0].strides = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z0.diminfo[0].shape = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 1511, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_Z0 = ((PyArrayObject *)__pyx_t_14);
  __pyx_t_14 = 0;
  __pyx_v_dZ0r = __pyx_t_11;
  __pyx_t_23 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_bla.rcbuffer->pybuffer);
    __pyx_t_19 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bla.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_19 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_bla.rcbuffer->pybuffer, (PyObject*)__pyx_v_bla, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_bla.diminfo[0].strides = __pyx_pybuffernd_bla.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_bla.diminfo[0].shape = __pyx_pybuffernd_bla.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_19 < 0)) __PYX_ERR(0, 1511, __pyx_L1_error)
  }
  __pyx_t_23 = 0;
  __Pyx_DECREF_SET(__pyx_v_bla, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;
  __pyx_v_NZ0 = __pyx_t_17;
+1512:                                                             np.max(VPoly[1,:])]),
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_10.data = __pyx_v_VPoly.data;
  __pyx_t_10.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1512, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_15, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+1513:                                                   dL, DL=None, Lim=True,
  __pyx_t_14 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
/* … */
  __pyx_t_14 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
+1514:                                                   margin=margin)
  __pyx_t_13 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_margin, __pyx_t_13) < 0) __PYX_ERR(0, 1513, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 1515: 
+1516:     PtsM, dSM, indM,\
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_15) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_15, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1516, __pyx_L1_error)
  __pyx_t_27 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsM.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsM, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_PtsM.diminfo[0].strides = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsM.diminfo[0].shape = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsM.diminfo[1].strides = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsM.diminfo[1].shape = __pyx_pybuffernd_PtsM.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1516, __pyx_L1_error)
  }
  __pyx_t_27 = 0;
  __pyx_v_PtsM = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_14);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dSM.rcbuffer->pybuffer, (PyObject*)__pyx_v_dSM, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_dSM.diminfo[0].strides = __pyx_pybuffernd_dSM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dSM.diminfo[0].shape = __pyx_pybuffernd_dSM.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1516, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_dSM = ((PyArrayObject *)__pyx_t_14);
  __pyx_t_14 = 0;
  __pyx_t_23 = ((PyArrayObject *)__pyx_t_13);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indM.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indM.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indM.rcbuffer->pybuffer, (PyObject*)__pyx_v_indM, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_indM.diminfo[0].strides = __pyx_pybuffernd_indM.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indM.diminfo[0].shape = __pyx_pybuffernd_indM.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1516, __pyx_L1_error)
  }
  __pyx_t_23 = 0;
  __pyx_v_indM = ((PyArrayObject *)__pyx_t_13);
  __pyx_t_13 = 0;
  __pyx_t_23 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1517, __pyx_L1_error)
  }
  __pyx_t_23 = 0;
  __pyx_v_NL = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1517, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_dLr = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_9);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1517, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_Rref = ((PyArrayObject *)__pyx_t_9);
  __pyx_t_9 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_15);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dRPhir.rcbuffer->pybuffer, (PyObject*)__pyx_v_dRPhir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
      }
      __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
    }
    __pyx_pybuffernd_dRPhir.diminfo[0].strides = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dRPhir.diminfo[0].shape = __pyx_pybuffernd_dRPhir.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1518, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_dRPhir = ((PyArrayObject *)__pyx_t_15);
  __pyx_t_15 = 0;
  __pyx_v_nRPhi0 = __pyx_t_24;
  __pyx_t_24 = 0;
  __pyx_t_27 = ((PyArrayObject *)__pyx_t_25);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_17 < 0)) {
      PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
      }
      __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
    }
    __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1518, __pyx_L1_error)
  }
  __pyx_t_27 = 0;
  __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_25);
  __pyx_t_25 = 0;
 1517:       NL, dLr, Rref,\
+1518:       dRPhir, nRPhi0, VPbis = _Ves_Smesh_Tor_SubFromD_cython(dL, dRPhi, VPoly,
  __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_Ves_Smesh_Tor_SubFromD_cython); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dRPhi); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
/* … */
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_14, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1518, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 9)) {
      if (size > 9) __Pyx_RaiseTooManyValuesError(9);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1516, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 5); 
      __pyx_t_15 = PyTuple_GET_ITEM(sequence, 6); 
      __pyx_t_24 = PyTuple_GET_ITEM(sequence, 7); 
      __pyx_t_25 = PyTuple_GET_ITEM(sequence, 8); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_13 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 5); 
      __pyx_t_15 = PyList_GET_ITEM(sequence, 6); 
      __pyx_t_24 = PyList_GET_ITEM(sequence, 7); 
      __pyx_t_25 = PyList_GET_ITEM(sequence, 8); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx_t_15);
    __Pyx_INCREF(__pyx_t_24);
    __Pyx_INCREF(__pyx_t_25);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[9] = {&__pyx_t_2,&__pyx_t_14,&__pyx_t_13,&__pyx_t_1,&__pyx_t_8,&__pyx_t_9,&__pyx_t_15,&__pyx_t_24,&__pyx_t_25};
      for (i=0; i < 9; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1516, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[9] = {&__pyx_t_2,&__pyx_t_14,&__pyx_t_13,&__pyx_t_1,&__pyx_t_8,&__pyx_t_9,&__pyx_t_15,&__pyx_t_24,&__pyx_t_25};
    __pyx_t_26 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1516, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = Py_TYPE(__pyx_t_26)->tp_iternext;
    for (index=0; index < 9; index++) {
      PyObject* item = __pyx_t_16(__pyx_t_26); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_26), 9) < 0) __PYX_ERR(0, 1516, __pyx_L1_error)
    __pyx_t_16 = NULL;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __pyx_t_16 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1516, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
+1519:                                                              DR=None, DZ=None,
  __pyx_t_2 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DR, Py_None) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DZ, Py_None) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
+1520:                                                              DPhi=None,
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DPhi, Py_None) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
+1521:                                                              DIn=DIn, VIn=VIn,
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DIn, __pyx_t_3) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
+1522:                                                              PhiMinMax=phiMinMax,
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_phiMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1522, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_PhiMinMax, __pyx_t_3) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1523:                                                              Out=Out, margin=margin)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Out, __pyx_v_Out) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1523, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 1519, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 1524:     # First face
+1525:     ii = (ind<NR0*NZ0).nonzero()[0]
  __pyx_t_25 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_24 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_25, Py_LT); __Pyx_XGOTREF(__pyx_t_24); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_24, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
  __pyx_t_24 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_25))) {
    __pyx_t_24 = PyMethod_GET_SELF(__pyx_t_25);
    if (likely(__pyx_t_24)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
      __Pyx_INCREF(__pyx_t_24);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_25, function);
    }
  }
  __pyx_t_3 = (__pyx_t_24) ? __Pyx_PyObject_CallOneArg(__pyx_t_25, __pyx_t_24) : __Pyx_PyObject_CallNoArg(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __pyx_t_25 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1525, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_ii = __pyx_t_25;
  __pyx_t_25 = 0;
+1526:     nii = len(ii)
  __pyx_t_28 = PyObject_Length(__pyx_v_ii); if (unlikely(__pyx_t_28 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1526, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_28;
+1527:     if nii>0:
  __pyx_t_29 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_29) {
/* … */
  }
+1528:         indZ0 = ind[ii] // NR0
    __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_24 = PyNumber_FloorDivide(__pyx_t_25, __pyx_t_3); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_24);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_24) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_24, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1528, __pyx_L1_error)
    __pyx_t_23 = ((PyArrayObject *)__pyx_t_24);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1528, __pyx_L1_error)
    }
    __pyx_t_23 = 0;
    __pyx_v_indZ0 = ((PyArrayObject *)__pyx_t_24);
    __pyx_t_24 = 0;
+1529:         indR0 = (ind[ii]-indZ0*NR0)
    __pyx_t_24 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_24);
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_25 = PyNumber_Multiply(((PyObject *)__pyx_v_indZ0), __pyx_t_3); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_24, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1529, __pyx_L1_error)
    __pyx_t_23 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indR0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_indR0.diminfo[0].strides = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indR0.diminfo[0].shape = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1529, __pyx_L1_error)
    }
    __pyx_t_23 = 0;
    __pyx_v_indR0 = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
+1530:         if Out.lower()=='(x,y,z)':
    __pyx_t_3 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_29 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_29 < 0)) __PYX_ERR(0, 1530, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_29) {
/* … */
      goto __pyx_L10;
    }
+1531:             pts = np.array([R0[indR0]*Ccos(phiMinMax[0]+Dphi),
      __Pyx_GetModuleGlobalName(__pyx_t_25, __pyx_n_s_np); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_25, __pyx_n_s_array); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_30 = 0;
      __pyx_t_15 = PyFloat_FromDouble(cos(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_30)) ))) + __pyx_v_Dphi))); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_9 = PyNumber_Multiply(__pyx_t_25, __pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
/* … */
      __pyx_t_15 = PyList_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_9);
      PyList_SET_ITEM(__pyx_t_15, 0, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_15, 1, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_25);
      PyList_SET_ITEM(__pyx_t_15, 2, __pyx_t_25);
      __pyx_t_9 = 0;
      __pyx_t_8 = 0;
      __pyx_t_25 = 0;
      __pyx_t_25 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_24))) {
        __pyx_t_25 = PyMethod_GET_SELF(__pyx_t_24);
        if (likely(__pyx_t_25)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_24);
          __Pyx_INCREF(__pyx_t_25);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_24, function);
        }
      }
      __pyx_t_3 = (__pyx_t_25) ? __Pyx_PyObject_Call2Args(__pyx_t_24, __pyx_t_25, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_24, __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1531, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1531, __pyx_L1_error)
      __pyx_t_27 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          }
          __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
        }
        __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1531, __pyx_L1_error)
      }
      __pyx_t_27 = 0;
      __pyx_v_pts = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
+1532:                             R0[indR0]*Csin(phiMinMax[0]+Dphi), Z0[indZ0]])
      __pyx_t_15 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_31 = 0;
      __pyx_t_25 = PyFloat_FromDouble(sin(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_31)) ))) + __pyx_v_Dphi))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __pyx_t_8 = PyNumber_Multiply(__pyx_t_15, __pyx_t_25); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1532, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
 1533:         else:
+1534:             pts = np.array([R0[indR0], Z0[indZ0],
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_24, __pyx_n_s_np); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_24, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
      __pyx_t_24 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
/* … */
      __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_24);
      PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_24);
      __Pyx_GIVEREF(__pyx_t_25);
      PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_25);
      __Pyx_GIVEREF(__pyx_t_13);
      PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_13);
      __pyx_t_24 = 0;
      __pyx_t_25 = 0;
      __pyx_t_13 = 0;
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_15);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_15, function);
        }
      }
      __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1534, __pyx_L1_error)
      __pyx_t_27 = ((PyArrayObject *)__pyx_t_3);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
          }
          __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
        }
        __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1534, __pyx_L1_error)
      }
      __pyx_t_27 = 0;
      __pyx_v_pts = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L10:;
+1535:                             (phiMinMax[0]+Dphi)*np.ones((nii,))])
      __pyx_t_32 = 0;
      __pyx_t_8 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_32)) ))) + __pyx_v_Dphi)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_nii); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_13);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_13, function);
        }
      }
      __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_1, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_14);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = PyNumber_Multiply(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1536:         pts = pts if nii>1 else pts.reshape((3,1))
    if (((__pyx_v_nii > 1) != 0)) {
      __Pyx_INCREF(((PyObject *)__pyx_v_pts));
      __pyx_t_3 = ((PyObject *)__pyx_v_pts);
    } else {
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pts), __pyx_n_s_reshape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1536, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_15 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_13, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_tuple__49);
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1536, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_15) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_15, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1536, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_15;
      __pyx_t_15 = 0;
    }
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_3), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1536, __pyx_L1_error)
    }
    __Pyx_DECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
+1537:         LPts.append( pts )
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LPts, ((PyObject *)__pyx_v_pts)); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1537, __pyx_L1_error)
+1538:         LdS.append( dR0r*dZ0r*np.ones((nii,)) )
    __pyx_t_3 = PyFloat_FromDouble((__pyx_v_dR0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_nii); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_25 = PyTuple_New(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_13))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_13);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_13, function);
      }
    }
    __pyx_t_15 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_9, __pyx_t_25) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_25);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_13 = PyNumber_Multiply(__pyx_t_3, __pyx_t_15); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_13); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 1539: 
 1540:     # Main body
+1541:     ii = (ind>=NR0*NZ0) & (ind<NR0*NZ0+PtsM.shape[1])
  __pyx_t_13 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_15 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_13, Py_GE); __Pyx_XGOTREF(__pyx_t_15); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1541, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyInt_From_Py_intptr_t(((__pyx_v_NR0 * __pyx_v_NZ0) + (__pyx_v_PtsM->dimensions[1]))); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_13, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1541, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = PyNumber_And(__pyx_t_15, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_ii, __pyx_t_13);
  __pyx_t_13 = 0;
+1542:     nii = len(ii)
  __pyx_t_28 = PyObject_Length(__pyx_v_ii); if (unlikely(__pyx_t_28 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1542, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_28;
+1543:     if nii>0:
  __pyx_t_29 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_29) {
/* … */
  }
+1544:         pts = PtsM[:,ind[ii]-NR0*NZ0] if nii>1\
    if (((__pyx_v_nii > 1) != 0)) {
      __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_15 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_25 = PyNumber_Subtract(__pyx_t_3, __pyx_t_15); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_slice__8);
      __Pyx_GIVEREF(__pyx_t_25);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_25);
      __pyx_t_25 = 0;
      __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsM), __pyx_t_15); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1544, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1544, __pyx_L1_error)
      __pyx_t_13 = __pyx_t_25;
      __pyx_t_25 = 0;
    } else {
+1545:           else PtsM[:,ind[ii]-NR0*NZ0].reshape((3,1))
      __pyx_t_15 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = PyNumber_Subtract(__pyx_t_15, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_slice__8);
      __Pyx_GIVEREF(__pyx_slice__8);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_slice__8);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsM), __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_reshape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_25 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_tuple__49);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1545, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1545, __pyx_L1_error)
      __pyx_t_13 = __pyx_t_25;
      __pyx_t_25 = 0;
    }
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_13), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1544, __pyx_L1_error)
    }
    __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_13));
    __pyx_t_13 = 0;
+1546:         LPts.append( PtsM[:,ind[ii]-NR0*NZ0] )
    __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_25 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_13, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = PyTuple_New(2); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_slice__8);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_25, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsM), __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_3); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1546, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1547:         LdS.append( dSM[ind[ii]-NR0*NZ0] )
    __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_25 = __Pyx_PyInt_From_int((__pyx_v_NR0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_13 = PyNumber_Subtract(__pyx_t_3, __pyx_t_25); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dSM), __pyx_t_13); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1547, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_25); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1547, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
 1548: 
 1549:     # Second face
+1550:     ii = (ind >= NR0*NZ0+PtsM.shape[1] ).nonzero()[0]
  __pyx_t_13 = __Pyx_PyInt_From_Py_intptr_t(((__pyx_v_NR0 * __pyx_v_NZ0) + (__pyx_v_PtsM->dimensions[1]))); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_3 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_13, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_13);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_13, function);
    }
  }
  __pyx_t_25 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_25, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_DECREF_SET(__pyx_v_ii, __pyx_t_13);
  __pyx_t_13 = 0;
+1551:     nii = len(ii)
  __pyx_t_28 = PyObject_Length(__pyx_v_ii); if (unlikely(__pyx_t_28 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1551, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_28;
+1552:     if nii>0:
  __pyx_t_29 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_29) {
/* … */
  }
+1553:         indZ0 = (ind[ii]-(NR0*NZ0+PtsM.shape[1])) // NR0
    __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_25 = __Pyx_PyInt_From_Py_intptr_t(((__pyx_v_NR0 * __pyx_v_NZ0) + (__pyx_v_PtsM->dimensions[1]))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_13, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_13 = PyNumber_FloorDivide(__pyx_t_3, __pyx_t_25); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1553, __pyx_L1_error)
    __pyx_t_23 = ((PyArrayObject *)__pyx_t_13);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1553, __pyx_L1_error)
    }
    __pyx_t_23 = 0;
    __Pyx_XDECREF_SET(__pyx_v_indZ0, ((PyArrayObject *)__pyx_t_13));
    __pyx_t_13 = 0;
+1554:         indR0 = ind[ii]-(NR0*NZ0+PtsM.shape[1]) - indZ0*NR0
    __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), __pyx_v_ii); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_25 = __Pyx_PyInt_From_Py_intptr_t(((__pyx_v_NR0 * __pyx_v_NZ0) + (__pyx_v_PtsM->dimensions[1]))); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_3 = PyNumber_Subtract(__pyx_t_13, __pyx_t_25); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_13 = PyNumber_Multiply(((PyObject *)__pyx_v_indZ0), __pyx_t_25); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __pyx_t_25 = PyNumber_Subtract(__pyx_t_3, __pyx_t_13); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1554, __pyx_L1_error)
    __pyx_t_23 = ((PyArrayObject *)__pyx_t_25);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_t_23, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indR0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indR0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_indR0.diminfo[0].strides = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indR0.diminfo[0].shape = __pyx_pybuffernd_indR0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1554, __pyx_L1_error)
    }
    __pyx_t_23 = 0;
    __Pyx_XDECREF_SET(__pyx_v_indR0, ((PyArrayObject *)__pyx_t_25));
    __pyx_t_25 = 0;
+1555:         if Out.lower()=='(x,y,z)':
    __pyx_t_25 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Out); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1555, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __pyx_t_29 = (__Pyx_PyString_Equals(__pyx_t_25, __pyx_kp_s_x_y_z, Py_EQ)); if (unlikely(__pyx_t_29 < 0)) __PYX_ERR(0, 1555, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (__pyx_t_29) {
/* … */
      goto __pyx_L13;
    }
+1556:             pts = np.array([R0[indR0]*Ccos(phiMinMax[1]-Dphi),
      __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_34 = 1;
      __pyx_t_9 = PyFloat_FromDouble(cos(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_34)) ))) - __pyx_v_Dphi))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_15 = PyNumber_Multiply(__pyx_t_13, __pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_15);
      PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_24);
      PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_24);
      __Pyx_GIVEREF(__pyx_t_13);
      PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_13);
      __pyx_t_15 = 0;
      __pyx_t_24 = 0;
      __pyx_t_13 = 0;
      __pyx_t_13 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_13)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_13);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_25 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1556, __pyx_L1_error)
      __pyx_t_27 = ((PyArrayObject *)__pyx_t_25);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          }
          __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
        }
        __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1556, __pyx_L1_error)
      }
      __pyx_t_27 = 0;
      __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_25));
      __pyx_t_25 = 0;
+1557:                             R0[indR0]*Csin(phiMinMax[1]-Dphi), Z0[indZ0]])
      __pyx_t_9 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_35 = 1;
      __pyx_t_13 = PyFloat_FromDouble(sin(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_35)) ))) - __pyx_v_Dphi))); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_24 = PyNumber_Multiply(__pyx_t_9, __pyx_t_13); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
 1558:         else:
+1559:             pts = np.array([R0[indR0], Z0[indZ0],
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_R0), ((PyObject *)__pyx_v_indR0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_13 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
/* … */
      __pyx_t_15 = PyList_New(3); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_15, 0, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_13);
      PyList_SET_ITEM(__pyx_t_15, 1, __pyx_t_13);
      __Pyx_GIVEREF(__pyx_t_14);
      PyList_SET_ITEM(__pyx_t_15, 2, __pyx_t_14);
      __pyx_t_3 = 0;
      __pyx_t_13 = 0;
      __pyx_t_14 = 0;
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_25 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_14, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1559, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_25);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (!(likely(((__pyx_t_25) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_25, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1559, __pyx_L1_error)
      __pyx_t_27 = ((PyArrayObject *)__pyx_t_25);
      {
        __Pyx_BufFmt_StackElem __pyx_stack[1];
        __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
        __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
        if (unlikely(__pyx_t_17 < 0)) {
          PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
          if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
            Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
            __Pyx_RaiseBufferFallbackError();
          } else {
            PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
          }
          __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
        }
        __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
        if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1559, __pyx_L1_error)
      }
      __pyx_t_27 = 0;
      __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_25));
      __pyx_t_25 = 0;
    }
    __pyx_L13:;
+1560:                             (phiMinMax[1]-Dphi)*np.ones((nii,))])
      __pyx_t_36 = 1;
      __pyx_t_24 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_phiMinMax.data) + __pyx_t_36)) ))) - __pyx_v_Dphi)); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_24);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyInt_FromSsize_t(__pyx_v_nii); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_14, function);
        }
      }
      __pyx_t_15 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_14 = PyNumber_Multiply(__pyx_t_24, __pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+1561:         pts = pts if nii>1 else pts.reshape((3,1))
    if (((__pyx_v_nii > 1) != 0)) {
      __Pyx_INCREF(((PyObject *)__pyx_v_pts));
      __pyx_t_25 = ((PyObject *)__pyx_v_pts);
    } else {
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pts), __pyx_n_s_reshape); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_14 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_15, function);
        }
      }
      __pyx_t_9 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_14, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_tuple__49);
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1561, __pyx_L1_error)
      __pyx_t_25 = __pyx_t_9;
      __pyx_t_9 = 0;
    }
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_25), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1561, __pyx_L1_error)
    }
    __Pyx_DECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_25));
    __pyx_t_25 = 0;
+1562:         LPts.append( pts )
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LPts, ((PyObject *)__pyx_v_pts)); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1562, __pyx_L1_error)
+1563:         LdS.append( dR0r*dZ0r*np.ones((nii,)) )
    __pyx_t_25 = PyFloat_FromDouble((__pyx_v_dR0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_ones); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = PyInt_FromSsize_t(__pyx_v_nii); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_15 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_9 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = PyNumber_Multiply(__pyx_t_25, __pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_33 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_14); if (unlikely(__pyx_t_33 == ((int)-1))) __PYX_ERR(0, 1563, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
 1564: 
 1565:     # Aggregate
+1566:     if len(LPts)==1:
  __pyx_t_28 = PyList_GET_SIZE(__pyx_v_LPts); if (unlikely(__pyx_t_28 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1566, __pyx_L1_error)
  __pyx_t_29 = ((__pyx_t_28 == 1) != 0);
  if (__pyx_t_29) {
/* … */
    goto __pyx_L14;
  }
+1567:         Pts = LPts[0]
    if (!(likely(((PyList_GET_ITEM(__pyx_v_LPts, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LPts, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1567, __pyx_L1_error)
    __pyx_t_14 = PyList_GET_ITEM(__pyx_v_LPts, 0);
    __Pyx_INCREF(__pyx_t_14);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_14), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1567, __pyx_L1_error)
    }
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_14);
    __pyx_t_14 = 0;
+1568:         dS = LdS[0]
    if (!(likely(((PyList_GET_ITEM(__pyx_v_LdS, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LdS, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1568, __pyx_L1_error)
    __pyx_t_14 = PyList_GET_ITEM(__pyx_v_LdS, 0);
    __Pyx_INCREF(__pyx_t_14);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_14), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1568, __pyx_L1_error)
    }
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_14);
    __pyx_t_14 = 0;
+1569:     elif len(LPts)>1:
  __pyx_t_28 = PyList_GET_SIZE(__pyx_v_LPts); if (unlikely(__pyx_t_28 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1569, __pyx_L1_error)
  __pyx_t_29 = ((__pyx_t_28 > 1) != 0);
  if (__pyx_t_29) {
/* … */
  }
  __pyx_L14:;
+1570:         Pts = np.concatenate(tuple(LPts),axis=1)
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = PyList_AsTuple(__pyx_v_LPts); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_25 = PyTuple_New(1); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_25, 0, __pyx_t_14);
    __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 1570, __pyx_L1_error)
    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_25, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1570, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1570, __pyx_L1_error)
    __pyx_t_27 = ((PyArrayObject *)__pyx_t_13);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_27, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_22, &__pyx_t_21, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_22); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_22, __pyx_t_21, __pyx_t_20);
        }
        __pyx_t_22 = __pyx_t_21 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1570, __pyx_L1_error)
    }
    __pyx_t_27 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_13);
    __pyx_t_13 = 0;
+1571:         dS = np.concatenate(tuple(LdS))
    __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_25);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = PyList_AsTuple(__pyx_v_LdS); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_25))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_25);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_25, function);
      }
    }
    __pyx_t_13 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_25, __pyx_t_9, __pyx_t_14) : __Pyx_PyObject_CallOneArg(__pyx_t_25, __pyx_t_14);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1571, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
    if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1571, __pyx_L1_error)
    __pyx_t_18 = ((PyArrayObject *)__pyx_t_13);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_21); Py_XDECREF(__pyx_t_22);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
        }
        __pyx_t_20 = __pyx_t_21 = __pyx_t_22 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1571, __pyx_L1_error)
    }
    __pyx_t_18 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_13);
    __pyx_t_13 = 0;
 1572: 
+1573:     return Pts, dS, NL, dLr, Rref, dR0r, dZ0r, dRPhir, VPbis
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_13 = PyFloat_FromDouble(__pyx_v_dR0r); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_25 = PyFloat_FromDouble(__pyx_v_dZ0r); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __pyx_t_14 = PyTuple_New(9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_14, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_14, 2, ((PyObject *)__pyx_v_NL));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_14, 3, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_14, 4, ((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_14, 5, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_t_25);
  __Pyx_INCREF(((PyObject *)__pyx_v_dRPhir));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dRPhir));
  PyTuple_SET_ITEM(__pyx_t_14, 7, ((PyObject *)__pyx_v_dRPhir));
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_14, 8, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_13 = 0;
  __pyx_t_25 = 0;
  __pyx_r = __pyx_t_14;
  __pyx_t_14 = 0;
  goto __pyx_L0;
 1574: 
 1575: 
 1576: 
 1577: 
 1578: 
 1579: 
 1580: ########################################################
 1581: ########################################################
 1582: #       Meshing - Surface - Lin
 1583: ########################################################
 1584: 
 1585: 
 1586: @cython.cdivision(True)
 1587: @cython.wraparound(False)
 1588: @cython.boundscheck(False)
+1589: cdef _check_DLvsLMinMax(double[::1] LMinMax, DL=None):
static PyObject *__pyx_f_4tofu_4geom_5_GG03__check_DLvsLMinMax(__Pyx_memviewslice __pyx_v_LMinMax, struct __pyx_opt_args_4tofu_4geom_5_GG03__check_DLvsLMinMax *__pyx_optional_args) {
  PyObject *__pyx_v_DL = ((PyObject *)Py_None);
  long __pyx_v_Inter;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_check_DLvsLMinMax", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_DL = __pyx_optional_args->DL;
    }
  }
  __Pyx_INCREF(__pyx_v_DL);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("tofu.geom._GG03._check_DLvsLMinMax", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_DL);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03__check_DLvsLMinMax {
  int __pyx_n;
  PyObject *DL;
};
+1590:     Inter = 1
  __pyx_v_Inter = 1;
+1591:     if DL is not None:
  __pyx_t_1 = (__pyx_v_DL != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+1592:         assert len(DL)==2 and DL[0]<DL[1]
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_3 = PyObject_Length(__pyx_v_DL); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1592, __pyx_L1_error)
      __pyx_t_1 = ((__pyx_t_3 == 2) != 0);
      if (__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L4_bool_binop_done;
      }
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_DL, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_DL, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1592, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1592, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1592, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_2 = __pyx_t_1;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_2)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 1592, __pyx_L1_error)
      }
    }
    #endif
+1593:         assert LMinMax[0]<LMinMax[1]
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_7 = 0;
      __pyx_t_8 = 1;
      if (unlikely(!(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_7)) ))) < (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_8)) )))) != 0))) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 1593, __pyx_L1_error)
      }
    }
    #endif
+1594:         DL = list(DL)
    __pyx_t_6 = PySequence_List(__pyx_v_DL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF_SET(__pyx_v_DL, __pyx_t_6);
    __pyx_t_6 = 0;
+1595:         if DL[0]>LMinMax[1] or DL[1]<LMinMax[0]:
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_DL, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_9 = 1;
    __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_9)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_DL, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_10 = 0;
    __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_10)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 1595, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+1596:             Inter = 0
      __pyx_v_Inter = 0;
 1597:         else:
+1598:             if DL[0]<=LMinMax[0]:
    /*else*/ {
      __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_DL, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1598, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = 0;
      __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_11)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1598, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_6, __pyx_t_5, Py_LE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1598, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1598, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_2) {
/* … */
      }
+1599:                 DL[0] = None
        if (unlikely(__Pyx_SetItemInt(__pyx_v_DL, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1599, __pyx_L1_error)
+1600:             if DL[1]>=LMinMax[1]:
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_DL, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1600, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_12 = 1;
      __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_LMinMax.data) + __pyx_t_12)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1600, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_4, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1600, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1600, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_2) {
/* … */
      }
    }
    __pyx_L6:;
+1601:                 DL[1] = None
        if (unlikely(__Pyx_SetItemInt(__pyx_v_DL, 1, Py_None, long, 1, __Pyx_PyInt_From_long, 0, 0, 0) < 0)) __PYX_ERR(0, 1601, __pyx_L1_error)
+1602:     return Inter, DL
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyInt_From_long(__pyx_v_Inter); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __Pyx_INCREF(__pyx_v_DL);
  __Pyx_GIVEREF(__pyx_v_DL);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_DL);
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 1603: 
 1604: 
 1605: 
 1606: @cython.cdivision(True)
 1607: @cython.wraparound(False)
 1608: @cython.boundscheck(False)
+1609: def _Ves_Smesh_Lin_SubFromD_cython(double[::1] XMinMax, double dL, double dX,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_41_Ves_Smesh_Lin_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_40_Ves_Smesh_Lin_SubFromD_cython[] = "Return the desired surfacic submesh indicated by the limits (DX,DY,DZ),\n    for the desired resolution (dX,dL) ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_41_Ves_Smesh_Lin_SubFromD_cython = {"_Ves_Smesh_Lin_SubFromD_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_41_Ves_Smesh_Lin_SubFromD_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_40_Ves_Smesh_Lin_SubFromD_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_41_Ves_Smesh_Lin_SubFromD_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_XMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  double __pyx_v_dX;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_DX = 0;
  PyObject *__pyx_v_DY = 0;
  PyObject *__pyx_v_DZ = 0;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Lin_SubFromD_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_XMinMax,&__pyx_n_s_dL,&__pyx_n_s_dX,&__pyx_n_s_VPoly,&__pyx_n_s_DX,&__pyx_n_s_DY,&__pyx_n_s_DZ,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_margin,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_40_Ves_Smesh_Lin_SubFromD_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_XMinMax, double __pyx_v_dL, double __pyx_v_dX, __Pyx_memviewslice __pyx_v_VPoly, PyObject *__pyx_v_DX, PyObject *__pyx_v_DY, PyObject *__pyx_v_DZ, double __pyx_v_DIn, PyObject *__pyx_v_VIn, double __pyx_v_margin) {
  PyArrayObject *__pyx_v_X = 0;
  PyArrayObject *__pyx_v_Y0 = 0;
  PyArrayObject *__pyx_v_Z0 = 0;
  double __pyx_v_dXr;
  double __pyx_v_dY0r;
  double __pyx_v_dZ0r;
  int __pyx_v_NY0;
  int __pyx_v_NZ0;
  int __pyx_v_Y0n;
  int __pyx_v_Z0n;
  int __pyx_v_NX;
  int __pyx_v_Xn;
  int __pyx_v_Ln;
  int __pyx_v_NR0;
  CYTHON_UNUSED int __pyx_v_Inter;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_PtsCross = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_indX = 0;
  PyArrayObject *__pyx_v_indY0 = 0;
  PyArrayObject *__pyx_v_indZ0 = 0;
  PyArrayObject *__pyx_v_indL = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyArrayObject *__pyx_v_ind = 0;
  PyObject *__pyx_v_InterX = NULL;
  PyObject *__pyx_v_InterY = NULL;
  PyObject *__pyx_v_InterZ = NULL;
  PyObject *__pyx_v_indin = NULL;
  PyObject *__pyx_v_pts = NULL;
  PyObject *__pyx_v_iind = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsCross;
  __Pyx_Buffer __pyx_pybuffer_PtsCross;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_X;
  __Pyx_Buffer __pyx_pybuffer_X;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Y0;
  __Pyx_Buffer __pyx_pybuffer_Y0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Z0;
  __Pyx_Buffer __pyx_pybuffer_Z0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indL;
  __Pyx_Buffer __pyx_pybuffer_indL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indX;
  __Pyx_Buffer __pyx_pybuffer_indX;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indY0;
  __Pyx_Buffer __pyx_pybuffer_indY0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ0;
  __Pyx_Buffer __pyx_pybuffer_indZ0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Lin_SubFromD_cython", 0);
  __Pyx_INCREF(__pyx_v_DX);
  __Pyx_INCREF(__pyx_v_DY);
  __Pyx_INCREF(__pyx_v_DZ);
  __pyx_pybuffer_X.pybuffer.buf = NULL;
  __pyx_pybuffer_X.refcount = 0;
  __pyx_pybuffernd_X.data = NULL;
  __pyx_pybuffernd_X.rcbuffer = &__pyx_pybuffer_X;
  __pyx_pybuffer_Y0.pybuffer.buf = NULL;
  __pyx_pybuffer_Y0.refcount = 0;
  __pyx_pybuffernd_Y0.data = NULL;
  __pyx_pybuffernd_Y0.rcbuffer = &__pyx_pybuffer_Y0;
  __pyx_pybuffer_Z0.pybuffer.buf = NULL;
  __pyx_pybuffer_Z0.refcount = 0;
  __pyx_pybuffernd_Z0.data = NULL;
  __pyx_pybuffernd_Z0.rcbuffer = &__pyx_pybuffer_Z0;
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_PtsCross.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsCross.refcount = 0;
  __pyx_pybuffernd_PtsCross.data = NULL;
  __pyx_pybuffernd_PtsCross.rcbuffer = &__pyx_pybuffer_PtsCross;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_indX.pybuffer.buf = NULL;
  __pyx_pybuffer_indX.refcount = 0;
  __pyx_pybuffernd_indX.data = NULL;
  __pyx_pybuffernd_indX.rcbuffer = &__pyx_pybuffer_indX;
  __pyx_pybuffer_indY0.pybuffer.buf = NULL;
  __pyx_pybuffer_indY0.refcount = 0;
  __pyx_pybuffernd_indY0.data = NULL;
  __pyx_pybuffernd_indY0.rcbuffer = &__pyx_pybuffer_indY0;
  __pyx_pybuffer_indZ0.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ0.refcount = 0;
  __pyx_pybuffernd_indZ0.data = NULL;
  __pyx_pybuffernd_indZ0.rcbuffer = &__pyx_pybuffer_indZ0;
  __pyx_pybuffer_indL.pybuffer.buf = NULL;
  __pyx_pybuffer_indL.refcount = 0;
  __pyx_pybuffernd_indL.data = NULL;
  __pyx_pybuffernd_indL.rcbuffer = &__pyx_pybuffer_indL;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __PYX_XDEC_MEMVIEW(&__pyx_t_30, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Lin_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_X);
  __Pyx_XDECREF((PyObject *)__pyx_v_Y0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Z0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsCross);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_indX);
  __Pyx_XDECREF((PyObject *)__pyx_v_indY0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indL);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_InterX);
  __Pyx_XDECREF(__pyx_v_InterY);
  __Pyx_XDECREF(__pyx_v_InterZ);
  __Pyx_XDECREF(__pyx_v_indin);
  __Pyx_XDECREF(__pyx_v_pts);
  __Pyx_XDECREF(__pyx_v_iind);
  __PYX_XDEC_MEMVIEW(&__pyx_v_XMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XDECREF(__pyx_v_DX);
  __Pyx_XDECREF(__pyx_v_DY);
  __Pyx_XDECREF(__pyx_v_DZ);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__198 = PyTuple_Pack(43, __pyx_n_s_XMinMax, __pyx_n_s_dL, __pyx_n_s_dX, __pyx_n_s_VPoly, __pyx_n_s_DX, __pyx_n_s_DY, __pyx_n_s_DZ, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_margin, __pyx_n_s_X, __pyx_n_s_Y0, __pyx_n_s_Z0, __pyx_n_s_dXr, __pyx_n_s_dY0r, __pyx_n_s_dZ0r, __pyx_n_s_NY0, __pyx_n_s_NZ0, __pyx_n_s_Y0n, __pyx_n_s_Z0n, __pyx_n_s_NX, __pyx_n_s_Xn, __pyx_n_s_Ln, __pyx_n_s_NR0, __pyx_n_s_Inter, __pyx_n_s_Pts, __pyx_n_s_PtsCross, __pyx_n_s_VPbis, __pyx_n_s_dS, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_indX, __pyx_n_s_indY0, __pyx_n_s_indZ0, __pyx_n_s_indL, __pyx_n_s_NL, __pyx_n_s_ind, __pyx_n_s_InterX, __pyx_n_s_InterY, __pyx_n_s_InterZ, __pyx_n_s_indin, __pyx_n_s_pts, __pyx_n_s_iind); if (unlikely(!__pyx_tuple__198)) __PYX_ERR(0, 1609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__198);
  __Pyx_GIVEREF(__pyx_tuple__198);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_41_Ves_Smesh_Lin_SubFromD_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_Lin_SubFromD_cython, __pyx_t_1) < 0) __PYX_ERR(0, 1609, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__199 = (PyObject*)__Pyx_PyCode_New(10, 0, 43, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__198, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_Lin_SubFromD_cython, 1609, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__199)) __PYX_ERR(0, 1609, __pyx_L1_error)
 1610:                                    double[:,::1] VPoly,
+1611:                                    DX=None, DY=None, DZ=None,
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
+1612:                                    double DIn=0., VIn=None,
    values[8] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_XMinMax)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromD_cython", 0, 4, 10, 1); __PYX_ERR(0, 1609, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dX)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromD_cython", 0, 4, 10, 2); __PYX_ERR(0, 1609, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromD_cython", 0, 4, 10, 3); __PYX_ERR(0, 1609, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DX);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DY);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DZ);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_Lin_SubFromD_cython") < 0)) __PYX_ERR(0, 1609, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_XMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_XMinMax.memview)) __PYX_ERR(0, 1609, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1609, __pyx_L3_error)
    __pyx_v_dX = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dX == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1609, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1610, __pyx_L3_error)
    __pyx_v_DX = values[4];
    __pyx_v_DY = values[5];
    __pyx_v_DZ = values[6];
    if (values[7]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1612, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[8];
    if (values[9]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1613, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__56;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromD_cython", 0, 4, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1609, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Lin_SubFromD_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_40_Ves_Smesh_Lin_SubFromD_cython(__pyx_self, __pyx_v_XMinMax, __pyx_v_dL, __pyx_v_dX, __pyx_v_VPoly, __pyx_v_DX, __pyx_v_DY, __pyx_v_DZ, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_margin);
+1613:                                    double margin=_VSMALL):
  __pyx_k__56 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1614:     """Return the desired surfacic submesh indicated by the limits (DX,DY,DZ),
 1615:     for the desired resolution (dX,dL) """
 1616:     cdef np.ndarray[double,ndim=1] X, Y0, Z0
 1617:     cdef double dXr, dY0r, dZ0r
+1618:     cdef int NY0, NZ0, Y0n, Z0n, NX, Xn, Ln, NR0, Inter=1
  __pyx_v_Inter = 1;
 1619:     cdef np.ndarray[double,ndim=2] Pts, PtsCross, VPbis
 1620:     cdef np.ndarray[double,ndim=1] dS, dLr, Rref
 1621:     cdef np.ndarray[long,ndim=1] indX, indY0, indZ0, indL, NL, ind
 1622: 
 1623:     # Preformat
 1624:     # Adjust limits
+1625:     InterX, DX = _check_DLvsLMinMax(XMinMax,DX)
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.DL = __pyx_v_DX;
  __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03__check_DLvsLMinMax(__pyx_v_XMinMax, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1625, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1625, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1625, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 1625, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1625, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_InterX = __pyx_t_3;
  __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_DX, __pyx_t_4);
  __pyx_t_4 = 0;
+1626:     InterY, DY = _check_DLvsLMinMax(np.array([np.min(VPoly[0,:]),
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_min); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8.data = __pyx_v_VPoly.data;
  __pyx_t_8.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1626, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_7);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
  __pyx_t_4 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_7, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.DL = __pyx_v_DY;
  __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03__check_DLvsLMinMax(__pyx_t_8, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1626, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1626, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_9);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1626, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_7)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_9 = __pyx_t_6(__pyx_t_7); if (unlikely(!__pyx_t_9)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_7), 2) < 0) __PYX_ERR(0, 1626, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1626, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
/* … */
  __pyx_v_InterY = __pyx_t_3;
  __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_DY, __pyx_t_9);
  __pyx_t_9 = 0;
+1627:                                               np.max(VPoly[0,:])]), DY)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_max); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8.data = __pyx_v_VPoly.data;
  __pyx_t_8.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1627, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_7 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1627, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1628:     InterZ, DZ = _check_DLvsLMinMax(np.array([np.min(VPoly[1,:]),
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_min); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8.data = __pyx_v_VPoly.data;
  __pyx_t_8.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1628, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_9 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __pyx_t_9 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.DL = __pyx_v_DZ;
  __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03__check_DLvsLMinMax(__pyx_t_8, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1628, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1628, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1628, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_5 = __pyx_t_6(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_4), 2) < 0) __PYX_ERR(0, 1628, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1628, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
/* … */
  __pyx_v_InterZ = __pyx_t_3;
  __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_DZ, __pyx_t_5);
  __pyx_t_5 = 0;
+1629:                                               np.max(VPoly[1,:])]), DZ)
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_max); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_8.data = __pyx_v_VPoly.data;
  __pyx_t_8.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1629, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_10, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1629, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1630: 
+1631:     if InterX==1 and InterY==1 and InterZ==1:
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_InterX, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_12) {
  } else {
    __pyx_t_11 = __pyx_t_12;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_InterY, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_12) {
  } else {
    __pyx_t_11 = __pyx_t_12;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_InterZ, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1631, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_11 = __pyx_t_12;
  __pyx_L10_bool_binop_done:;
  if (__pyx_t_11) {
/* … */
    goto __pyx_L9;
  }
 1632: 
 1633:         # Get the mesh for the faces
+1634:         Y0, dY0r,\
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1634, __pyx_L1_error)
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1634, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1634, __pyx_L1_error)
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1634, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_16 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Y0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Y0.diminfo[0].strides = __pyx_pybuffernd_Y0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Y0.diminfo[0].shape = __pyx_pybuffernd_Y0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1634, __pyx_L1_error)
    }
    __pyx_t_16 = 0;
    __pyx_v_Y0 = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_v_dY0r = __pyx_t_14;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indY0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_indY0.diminfo[0].strides = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indY0.diminfo[0].shape = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1635, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_indY0 = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_v_NY0 = __pyx_t_15;
+1635:           indY0, NY0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[0,:]),
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_min); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_8.data = __pyx_v_VPoly.data;
    __pyx_t_8.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1635, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_3 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
    __pyx_t_10 = PyList_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_7);
    PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_7);
    __pyx_t_3 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_7, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
    __pyx_t_5 = 0;
    __pyx_t_4 = 0;
/* … */
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_10, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1635, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
      PyObject* sequence = __pyx_t_5;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 4)) {
        if (size > 4) __Pyx_RaiseTooManyValuesError(4);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1634, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 3); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_7 = PyList_GET_ITEM(sequence, 3); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_10,&__pyx_t_1,&__pyx_t_7};
        for (i=0; i < 4; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1634, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_10,&__pyx_t_1,&__pyx_t_7};
      __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
      for (index=0; index < 4; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_3); if (unlikely(!item)) goto __pyx_L13_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 4) < 0) __PYX_ERR(0, 1634, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      goto __pyx_L14_unpacking_done;
      __pyx_L13_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1634, __pyx_L1_error)
      __pyx_L14_unpacking_done:;
    }
+1636:                                                           np.max(VPoly[0,:])]),
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1636, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_max); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1636, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_8.data = __pyx_v_VPoly.data;
    __pyx_t_8.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1636, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_9 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1636, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_7 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_13, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1636, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1637:                                                 dL, DL=DY, Lim=True,
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
/* … */
    __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_DL, __pyx_v_DY) < 0) __PYX_ERR(0, 1637, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1637, __pyx_L1_error)
+1638:                                                 margin=margin)
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_margin, __pyx_t_5) < 0) __PYX_ERR(0, 1637, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1639:         Z0, dZ0r,\
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1639, __pyx_L1_error)
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1639, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1639, __pyx_L1_error)
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1639, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_16 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Z0.diminfo[0].strides = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z0.diminfo[0].shape = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1639, __pyx_L1_error)
    }
    __pyx_t_16 = 0;
    __pyx_v_Z0 = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_v_dZ0r = __pyx_t_14;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1640, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_indZ0 = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_v_NZ0 = __pyx_t_15;
+1640:           indZ0, NZ0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[1,:]),
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8.data = __pyx_v_VPoly.data;
    __pyx_t_8.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1640, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_1);
    PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_3);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_7 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_3, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
    __pyx_t_7 = 0;
    __pyx_t_10 = 0;
/* … */
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1640, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
      PyObject* sequence = __pyx_t_7;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 4)) {
        if (size > 4) __Pyx_RaiseTooManyValuesError(4);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1639, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
      } else {
        __pyx_t_10 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
      }
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[4] = {&__pyx_t_10,&__pyx_t_9,&__pyx_t_5,&__pyx_t_3};
        for (i=0; i < 4; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1639, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[4] = {&__pyx_t_10,&__pyx_t_9,&__pyx_t_5,&__pyx_t_3};
      __pyx_t_1 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1639, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
      for (index=0; index < 4; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_1); if (unlikely(!item)) goto __pyx_L15_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1639, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L16_unpacking_done;
      __pyx_L15_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1639, __pyx_L1_error)
      __pyx_L16_unpacking_done:;
    }
+1641:                                                           np.max(VPoly[1,:])]),
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_max); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_8.data = __pyx_v_VPoly.data;
    __pyx_t_8.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_8, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1641, __pyx_L1_error)
        __pyx_t_8.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_8.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_8.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_8.suboffsets[0] = -1;

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_8, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
    __pyx_t_8.memview = NULL;
    __pyx_t_8.data = NULL;
    __pyx_t_13 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_13, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1642:                                                 dL, DL=DZ, Lim=True,
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
/* … */
    __pyx_t_10 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1642, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_DL, __pyx_v_DZ) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
+1643:                                                 margin=margin)
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1643, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_margin, __pyx_t_7) < 0) __PYX_ERR(0, 1642, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+1644:         Y0n, Z0n = len(Y0), len(Z0)
    __pyx_t_22 = PyObject_Length(((PyObject *)__pyx_v_Y0)); if (unlikely(__pyx_t_22 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1644, __pyx_L1_error)
    __pyx_t_23 = PyObject_Length(((PyObject *)__pyx_v_Z0)); if (unlikely(__pyx_t_23 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1644, __pyx_L1_error)
    __pyx_v_Y0n = __pyx_t_22;
    __pyx_v_Z0n = __pyx_t_23;
 1645: 
 1646:         # Get the actual R and Z resolutions and mesh elements
+1647:         X, dXr, indX, NX = _Ves_mesh_dlfromL_cython(XMinMax, dX, DL=DX,
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_XMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dX); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5);
    __pyx_t_3 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_DL, __pyx_v_DX) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
/* … */
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 4)) {
        if (size > 4) __Pyx_RaiseTooManyValuesError(4);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1647, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_10 = PyTuple_GET_ITEM(sequence, 3); 
      } else {
        __pyx_t_5 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_10 = PyList_GET_ITEM(sequence, 3); 
      }
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_10);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_9,&__pyx_t_7,&__pyx_t_10};
        for (i=0; i < 4; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1647, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_9,&__pyx_t_7,&__pyx_t_10};
      __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1647, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
      for (index=0; index < 4; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_1); if (unlikely(!item)) goto __pyx_L17_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L18_unpacking_done;
      __pyx_L17_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1647, __pyx_L1_error)
      __pyx_L18_unpacking_done:;
    }
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1647, __pyx_L1_error)
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1647, __pyx_L1_error)
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_10); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_16 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_t_16, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_X.diminfo[0].strides = __pyx_pybuffernd_X.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_X.diminfo[0].shape = __pyx_pybuffernd_X.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1647, __pyx_L1_error)
    }
    __pyx_t_16 = 0;
    __pyx_v_X = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_v_dXr = __pyx_t_14;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_7);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
      __pyx_t_17 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_17 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_v_indX, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_indX.diminfo[0].strides = __pyx_pybuffernd_indX.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indX.diminfo[0].shape = __pyx_pybuffernd_indX.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_17 < 0)) __PYX_ERR(0, 1647, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_indX = ((PyArrayObject *)__pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_v_NX = __pyx_t_15;
+1648:                                                     Lim=True, margin=margin)
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1648, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 1647, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+1649:         Xn = len(X)
    __pyx_t_23 = PyObject_Length(((PyObject *)__pyx_v_X)); if (unlikely(__pyx_t_23 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1649, __pyx_L1_error)
    __pyx_v_Xn = __pyx_t_23;
+1650:         PtsCross, dLr, indL,\
    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1650, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_7);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1650, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_PtsCross = ((PyArrayObject *)__pyx_t_7);
    __pyx_t_7 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1650, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_dLr = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_v_indL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_indL.diminfo[0].strides = __pyx_pybuffernd_indL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indL.diminfo[0].shape = __pyx_pybuffernd_indL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1650, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_indL = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1651, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1651, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1651, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
+1651:           NL, Rref, VPbis = _Ves_Smesh_Cross(VPoly, dL, D1=None, D2=None,
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Ves_Smesh_Cross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
    __pyx_t_10 = 0;
    __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_D1, Py_None) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_D2, Py_None) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
/* … */
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_10))) || (PyList_CheckExact(__pyx_t_10))) {
      PyObject* sequence = __pyx_t_10;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 6)) {
        if (size > 6) __Pyx_RaiseTooManyValuesError(6);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1650, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 5); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 4); 
        __pyx_t_4 = PyList_GET_ITEM(sequence, 5); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_4);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[6] = {&__pyx_t_7,&__pyx_t_9,&__pyx_t_3,&__pyx_t_5,&__pyx_t_1,&__pyx_t_4};
        for (i=0; i < 6; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1650, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[6] = {&__pyx_t_7,&__pyx_t_9,&__pyx_t_3,&__pyx_t_5,&__pyx_t_1,&__pyx_t_4};
      __pyx_t_13 = PyObject_GetIter(__pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1650, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_6 = Py_TYPE(__pyx_t_13)->tp_iternext;
      for (index=0; index < 6; index++) {
        PyObject* item = __pyx_t_6(__pyx_t_13); if (unlikely(!item)) goto __pyx_L19_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_13), 6) < 0) __PYX_ERR(0, 1650, __pyx_L1_error)
      __pyx_t_6 = NULL;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L20_unpacking_done;
      __pyx_L19_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_6 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1650, __pyx_L1_error)
      __pyx_L20_unpacking_done:;
    }
+1652:                                              margin=margin, DIn=DIn, VIn=VIn)
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_margin, __pyx_t_10) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_DIn, __pyx_t_10) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1651, __pyx_L1_error)
+1653:         NR0 = Rref.size
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_Rref), __pyx_n_s_size); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1653, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_10); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1653, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_NR0 = __pyx_t_15;
+1654:         indin = np.ones((PtsCross.shape[1],),dtype=bool)
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_PtsCross->dimensions[1])); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 1654, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1654, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_indin = __pyx_t_5;
    __pyx_t_5 = 0;
+1655:         if DY is not None:
    __pyx_t_11 = (__pyx_v_DY != Py_None);
    __pyx_t_12 = (__pyx_t_11 != 0);
    if (__pyx_t_12) {
/* … */
    }
+1656:             if DY[0] is not None:
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_DY, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1656, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = (__pyx_t_5 != Py_None);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = (__pyx_t_12 != 0);
      if (__pyx_t_11) {
/* … */
      }
+1657:                 indin = indin & (PtsCross[0,:]>=DY[0])
        __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__36); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1657, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DY, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1657, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1657, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyNumber_And(__pyx_v_indin, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1657, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_1);
        __pyx_t_1 = 0;
+1658:             if DY[1] is not None:
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DY, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1658, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_11 = (__pyx_t_1 != Py_None);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_12 = (__pyx_t_11 != 0);
      if (__pyx_t_12) {
/* … */
      }
+1659:                 indin = indin & (PtsCross[0,:]<=DY[1])
        __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__36); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1659, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_DY, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1659, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_10, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1659, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyNumber_And(__pyx_v_indin, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1659, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_10);
        __pyx_t_10 = 0;
+1660:         if DZ is not None:
    __pyx_t_12 = (__pyx_v_DZ != Py_None);
    __pyx_t_11 = (__pyx_t_12 != 0);
    if (__pyx_t_11) {
/* … */
    }
+1661:             if DZ[0] is not None:
      __pyx_t_10 = __Pyx_GetItemInt(__pyx_v_DZ, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1661, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = (__pyx_t_10 != Py_None);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_12 = (__pyx_t_11 != 0);
      if (__pyx_t_12) {
/* … */
      }
+1662:                 indin = indin & (PtsCross[1,:]>=DZ[0])
        __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1662, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_DZ, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1662, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_1 = PyObject_RichCompare(__pyx_t_10, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1662, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_And(__pyx_v_indin, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1662, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_5);
        __pyx_t_5 = 0;
+1663:             if DZ[1] is not None:
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_DZ, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1663, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = (__pyx_t_5 != Py_None);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_11 = (__pyx_t_12 != 0);
      if (__pyx_t_11) {
/* … */
      }
+1664:                 indin = indin & (PtsCross[1,:]<=DZ[1])
        __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1664, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_DZ, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1664, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_10 = PyObject_RichCompare(__pyx_t_5, __pyx_t_1, Py_LE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1664, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyNumber_And(__pyx_v_indin, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1664, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_1);
        __pyx_t_1 = 0;
 1665:         PtsCross, dLr,\
+1666:           indL, Rref = PtsCross[:,indin], dLr[indin], indL[indin], Rref[indin]
    __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_indin);
    __Pyx_GIVEREF(__pyx_v_indin);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_indin);
    __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1666, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), __pyx_v_indin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1666, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_indL), __pyx_v_indin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1666, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Rref), __pyx_v_indin); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1666, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1666, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1665, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __Pyx_DECREF_SET(__pyx_v_PtsCross, ((PyArrayObject *)__pyx_t_10));
    __pyx_t_10 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1665, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __Pyx_DECREF_SET(__pyx_v_dLr, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_v_indL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_indL.diminfo[0].strides = __pyx_pybuffernd_indL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indL.diminfo[0].shape = __pyx_pybuffernd_indL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1666, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __Pyx_DECREF_SET(__pyx_v_indL, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1666, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __Pyx_DECREF_SET(__pyx_v_Rref, ((PyArrayObject *)__pyx_t_4));
    __pyx_t_4 = 0;
+1667:         Ln = indin.sum()
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1667, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1667, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_Ln = __pyx_t_15;
 1668:         # Agregating
+1669:         Pts = np.array([np.repeat(X,Ln),
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_repeat); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_X), __pyx_t_10};
      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1669, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_X), __pyx_t_10};
      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1669, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_INCREF(((PyObject *)__pyx_v_X));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_X));
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, ((PyObject *)__pyx_v_X));
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_t_10);
      __pyx_t_10 = 0;
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1669, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __pyx_t_9 = PyList_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_5);
    PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_3);
    PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_10);
    PyList_SET_ITEM(__pyx_t_9, 2, __pyx_t_10);
    __pyx_t_5 = 0;
    __pyx_t_3 = 0;
    __pyx_t_10 = 0;
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_10, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_9);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1669, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1669, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1669, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
+1670:                         np.tile(PtsCross[0,:],Xn),
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_tile); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__36); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1670, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_13 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_t_7, __pyx_t_9};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1670, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_t_7, __pyx_t_9};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1670, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_26 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1670, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_26);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_26, 0+__pyx_t_15, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_26, 1+__pyx_t_15, __pyx_t_9);
      __pyx_t_7 = 0;
      __pyx_t_9 = 0;
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_26, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1670, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1671:                         np.tile(PtsCross[1,:],Xn)])
    __Pyx_GetModuleGlobalName(__pyx_t_26, __pyx_n_s_np); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_26, __pyx_n_s_tile); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    __pyx_t_26 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_tuple__42); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1671, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_13 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_13)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_13);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_t_26, __pyx_t_7};
      __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1671, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
      PyObject *__pyx_temp[3] = {__pyx_t_13, __pyx_t_26, __pyx_t_7};
      __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1671, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_27 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1671, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      if (__pyx_t_13) {
        __Pyx_GIVEREF(__pyx_t_13); PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_13); __pyx_t_13 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_26);
      PyTuple_SET_ITEM(__pyx_t_27, 0+__pyx_t_15, __pyx_t_26);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_27, 1+__pyx_t_15, __pyx_t_7);
      __pyx_t_26 = 0;
      __pyx_t_7 = 0;
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_27, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1671, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    }
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+1672:         ind = NY0*NZ0 + np.repeat(indX*NR0,Ln) + np.tile(indL,Xn)
    __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_repeat); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_NR0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_indX), __pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_5 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    } else
    #endif
    {
      __pyx_t_27 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_27, 0+__pyx_t_15, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_27, 1+__pyx_t_15, __pyx_t_9);
      __pyx_t_3 = 0;
      __pyx_t_9 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_27, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = PyNumber_Add(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_tile); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_27);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_9 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_27))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_27);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_27);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_27, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_27)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_indL), __pyx_t_4};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_27, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_27)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, ((PyObject *)__pyx_v_indL), __pyx_t_4};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_27, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_INCREF(((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indL));
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_15, ((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_15, __pyx_t_4);
      __pyx_t_4 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_27, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1672, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    __pyx_t_27 = PyNumber_Add(__pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_27);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_27) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_27, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1672, __pyx_L1_error)
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_27);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1672, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_ind = ((PyArrayObject *)__pyx_t_27);
    __pyx_t_27 = 0;
+1673:         dS = np.tile(dLr*dXr,Xn)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_tile); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyNumber_Multiply(((PyObject *)__pyx_v_dLr), __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Xn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = NULL;
    __pyx_t_15 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
        __pyx_t_15 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_1};
      __pyx_t_27 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1673, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_1};
      __pyx_t_27 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1673, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_15, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_15, __pyx_t_1);
      __pyx_t_3 = 0;
      __pyx_t_1 = 0;
      __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_9, NULL); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1673, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (!(likely(((__pyx_t_27) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_27, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1673, __pyx_L1_error)
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_27);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1673, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_27);
    __pyx_t_27 = 0;
+1674:         if DX is None or DX[0] is None:
    __pyx_t_12 = (__pyx_v_DX == Py_None);
    __pyx_t_28 = (__pyx_t_12 != 0);
    if (!__pyx_t_28) {
    } else {
      __pyx_t_11 = __pyx_t_28;
      goto __pyx_L28_bool_binop_done;
    }
    __pyx_t_27 = __Pyx_GetItemInt(__pyx_v_DX, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_27);
    __pyx_t_28 = (__pyx_t_27 == Py_None);
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    __pyx_t_12 = (__pyx_t_28 != 0);
    __pyx_t_11 = __pyx_t_12;
    __pyx_L28_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
    }
+1675:             pts = np.array([(XMinMax[0]+DIn)*np.ones((Y0n*Z0n,)),
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_29 = 0;
      __pyx_t_10 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_29)) ))) + __pyx_v_DIn)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_Y0n * __pyx_v_Z0n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Multiply(__pyx_t_10, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_t_10 = PyList_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_1);
      PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_10, 2, __pyx_t_5);
      __pyx_t_4 = 0;
      __pyx_t_1 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_27 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_10);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_pts = __pyx_t_27;
      __pyx_t_27 = 0;
+1676:                             np.tile(Y0,Z0n),
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_tile); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_3 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_Y0), __pyx_t_10};
        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_Y0), __pyx_t_10};
        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      {
        __pyx_t_7 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1676, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_Y0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Y0));
        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, ((PyObject *)__pyx_v_Y0));
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_t_10);
        __pyx_t_10 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1676, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+1677:                             np.repeat(Z0,Y0n)])
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_repeat); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_Y0n); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1677, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_Z0), __pyx_t_7};
        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1677, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_Z0), __pyx_t_7};
        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1677, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      {
        __pyx_t_26 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1677, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Z0));
        PyTuple_SET_ITEM(__pyx_t_26, 0+__pyx_t_15, ((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_26, 1+__pyx_t_15, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_26, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1677, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+1678:             iind = NY0*np.repeat(indZ0,Y0n) + np.tile(indY0,Z0n)
      __pyx_t_27 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_repeat); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_Y0n); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_1 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_5, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_indZ0), __pyx_t_10};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
        PyObject *__pyx_temp[3] = {__pyx_t_1, ((PyObject *)__pyx_v_indZ0), __pyx_t_10};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      } else
      #endif
      {
        __pyx_t_4 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (__pyx_t_1) {
          __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indZ0));
        PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_15, ((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_15, __pyx_t_10);
        __pyx_t_10 = 0;
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_27, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_tile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      __pyx_t_27 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __pyx_t_10 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, ((PyObject *)__pyx_v_indY0), __pyx_t_27};
        __pyx_t_9 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, ((PyObject *)__pyx_v_indY0), __pyx_t_27};
        __pyx_t_9 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_10) {
          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10); __pyx_t_10 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indY0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indY0));
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_15, ((PyObject *)__pyx_v_indY0));
        __Pyx_GIVEREF(__pyx_t_27);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_15, __pyx_t_27);
        __pyx_t_27 = 0;
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1678, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Add(__pyx_t_5, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_v_iind = __pyx_t_4;
      __pyx_t_4 = 0;
+1679:             indin = Path(VPoly.T).contains_points(pts[1:,:].T, transform=None,
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_Path); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_30 = __pyx_v_VPoly;
      __PYX_INC_MEMVIEW(&__pyx_t_30, 1);
      if (unlikely(__pyx_memslice_transpose(&__pyx_t_30) == 0)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_30, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __PYX_XDEC_MEMVIEW(&__pyx_t_30, 1);
      __pyx_t_30.memview = NULL;
      __pyx_t_30.data = NULL;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__35); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_T); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 1679, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 1679, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1679, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_1);
      __pyx_t_1 = 0;
 1680:                                                   radius=0.0)
+1681:             if np.any(indin):
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_any); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_indin) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_indin);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1681, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_11) {
/* … */
      }
+1682:                 pts = pts[:,indin].reshape((3,1)) if indin.sum()==1\
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
          }
        }
        __pyx_t_4 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1682, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1682, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (__pyx_t_11) {
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_indin);
          __pyx_t_9 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_reshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_9 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_9)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_9);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_tuple__49);
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_1 = __pyx_t_5;
          __pyx_t_5 = 0;
        } else {
+1683:                   else pts[:,indin]
          __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1683, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_indin);
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1683, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_1 = __pyx_t_4;
          __pyx_t_4 = 0;
        }
        __Pyx_DECREF_SET(__pyx_v_pts, __pyx_t_1);
        __pyx_t_1 = 0;
+1684:                 Pts = np.concatenate((pts,Pts),axis=1)
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(__pyx_v_pts);
        __Pyx_GIVEREF(__pyx_v_pts);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_pts);
        __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
        PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_Pts));
        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
        __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 1684, __pyx_L1_error)
        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1684, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1684, __pyx_L1_error)
        __pyx_t_24 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
            }
            __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
          }
          __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1684, __pyx_L1_error)
        }
        __pyx_t_24 = 0;
        __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_9));
        __pyx_t_9 = 0;
+1685:                 ind = np.concatenate((iind[indin], ind))
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1685, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1685, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_iind, __pyx_v_indin); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1685, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1685, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_1);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
        __Pyx_INCREF(((PyObject *)__pyx_v_ind));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
        PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_ind));
        __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_5, function);
          }
        }
        __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1685, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1685, __pyx_L1_error)
        __pyx_t_21 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
            }
            __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
          }
          __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1685, __pyx_L1_error)
        }
        __pyx_t_21 = 0;
        __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_9));
        __pyx_t_9 = 0;
+1686:                 dS = np.concatenate((dY0r*dZ0r*np.ones((indin.sum(),)),dS))
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyFloat_FromDouble((__pyx_v_dY0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_ones); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __pyx_t_7 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_26))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_26);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_26, function);
          }
        }
        __pyx_t_27 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_26);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_26 = PyTuple_New(1); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_GIVEREF(__pyx_t_27);
        PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_27);
        __pyx_t_27 = 0;
        __pyx_t_27 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_27)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_27);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_1 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_27, __pyx_t_26) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_26);
        __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyNumber_Multiply(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
        __Pyx_INCREF(((PyObject *)__pyx_v_dS));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
        PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_dS));
        __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_9 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1686, __pyx_L1_error)
        __pyx_t_25 = ((PyArrayObject *)__pyx_t_9);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
            }
            __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
          }
          __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1686, __pyx_L1_error)
        }
        __pyx_t_25 = 0;
        __Pyx_DECREF_SET(__pyx_v_dS, ((PyArrayObject *)__pyx_t_9));
        __pyx_t_9 = 0;
+1687:         if DX is None or DX[1] is None:
    __pyx_t_12 = (__pyx_v_DX == Py_None);
    __pyx_t_28 = (__pyx_t_12 != 0);
    if (!__pyx_t_28) {
    } else {
      __pyx_t_11 = __pyx_t_28;
      goto __pyx_L32_bool_binop_done;
    }
    __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_DX, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1687, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_28 = (__pyx_t_9 == Py_None);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_12 = (__pyx_t_28 != 0);
    __pyx_t_11 = __pyx_t_12;
    __pyx_L32_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
    }
+1688:             pts = np.array([(XMinMax[1]-DIn)*np.ones((Y0n*Z0n,)),
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_31 = 1;
      __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_31)) ))) - __pyx_v_DIn)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_26);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_Y0n * __pyx_v_Z0n)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_27 = PyTuple_New(1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_26))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_26);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_26, function);
        }
      }
      __pyx_t_10 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_26, __pyx_t_5, __pyx_t_27) : __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_t_27);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
      __pyx_t_26 = PyNumber_Multiply(__pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_26);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
      __pyx_t_4 = PyList_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_26);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_26);
      __Pyx_GIVEREF(__pyx_t_10);
      PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_27);
      PyList_SET_ITEM(__pyx_t_4, 2, __pyx_t_27);
      __pyx_t_26 = 0;
      __pyx_t_10 = 0;
      __pyx_t_27 = 0;
      __pyx_t_27 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_27)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_27);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_9 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_27, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1688, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF_SET(__pyx_v_pts, __pyx_t_9);
      __pyx_t_9 = 0;
+1689:                             np.tile(Y0,Z0n),
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_tile); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1689, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_27))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_27);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_27);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_27, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_27)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_Y0), __pyx_t_4};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_27, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1689, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_27)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_Y0), __pyx_t_4};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_27, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1689, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else
      #endif
      {
        __pyx_t_7 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1689, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_Y0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Y0));
        PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_15, ((PyObject *)__pyx_v_Y0));
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_15, __pyx_t_4);
        __pyx_t_4 = 0;
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_27, __pyx_t_7, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1689, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      }
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+1690:                             np.repeat(Z0,Y0n)])
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1690, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_repeat); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1690, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_Y0n); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1690, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_Z0), __pyx_t_7};
        __pyx_t_27 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1690, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
        PyObject *__pyx_temp[3] = {__pyx_t_5, ((PyObject *)__pyx_v_Z0), __pyx_t_7};
        __pyx_t_27 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1690, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      } else
      #endif
      {
        __pyx_t_3 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1690, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__pyx_t_5) {
          __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Z0));
        PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_15, ((PyObject *)__pyx_v_Z0));
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_15, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1690, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+1691:             iind = NY0*NZ0 + NX*NR0 + NY0*np.repeat(indZ0,Y0n) +\
      __pyx_t_9 = __Pyx_PyInt_From_int(((__pyx_v_NY0 * __pyx_v_NZ0) + (__pyx_v_NX * __pyx_v_NR0))); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_repeat); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      __pyx_t_27 = __Pyx_PyInt_From_int(__pyx_v_Y0n); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __pyx_t_26 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_26 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_26)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_26);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_26, ((PyObject *)__pyx_v_indZ0), __pyx_t_27};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1691, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_26, ((PyObject *)__pyx_v_indZ0), __pyx_t_27};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1691, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_26); __pyx_t_26 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      } else
      #endif
      {
        __pyx_t_3 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1691, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (__pyx_t_26) {
          __Pyx_GIVEREF(__pyx_t_26); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_26); __pyx_t_26 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indZ0));
        PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_15, ((PyObject *)__pyx_v_indZ0));
        __Pyx_GIVEREF(__pyx_t_27);
        PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_15, __pyx_t_27);
        __pyx_t_27 = 0;
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1691, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Add(__pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
      __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1691, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF_SET(__pyx_v_iind, __pyx_t_1);
      __pyx_t_1 = 0;
+1692:               np.tile(indY0,Z0n)
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_tile); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_Z0n); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1692, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = NULL;
      __pyx_t_15 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
          __pyx_t_15 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_indY0), __pyx_t_9};
        __pyx_t_10 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_indY0), __pyx_t_9};
        __pyx_t_10 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_15, 2+__pyx_t_15); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      {
        __pyx_t_27 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_27, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_INCREF(((PyObject *)__pyx_v_indY0));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_indY0));
        PyTuple_SET_ITEM(__pyx_t_27, 0+__pyx_t_15, ((PyObject *)__pyx_v_indY0));
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_27, 1+__pyx_t_15, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_27, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1693:             indin = Path(VPoly.T).contains_points(pts[1:,:].T,
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_Path); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_30 = __pyx_v_VPoly;
      __PYX_INC_MEMVIEW(&__pyx_t_30, 1);
      if (unlikely(__pyx_memslice_transpose(&__pyx_t_30) == 0)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_30, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __PYX_XDEC_MEMVIEW(&__pyx_t_30, 1);
      __pyx_t_30.memview = NULL;
      __pyx_t_30.data = NULL;
      __pyx_t_27 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_27)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_27);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_1 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_27, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_contains_points); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_tuple__35); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
      __pyx_t_4 = 0;
/* … */
      __pyx_t_27 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1693, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_indin, __pyx_t_27);
      __pyx_t_27 = 0;
+1694:                                                   transform=None,
      __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1694, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 1694, __pyx_L1_error)
      if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 1694, __pyx_L1_error)
 1695:                                                   radius=0.0)
+1696:             if np.any(indin):
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1696, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1696, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_27 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_4, __pyx_v_indin) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_indin);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1696, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_27);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_27); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1696, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
      if (__pyx_t_11) {
/* … */
      }
+1697:                 pts = pts[:,indin].reshape((3,1)) if indin.sum()==1\
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_1 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 1697, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (__pyx_t_11) {
          __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1697, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_indin);
          __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1697, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1697, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = NULL;
          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_10)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_10);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_4 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_10, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_tuple__49);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1697, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_27 = __pyx_t_4;
          __pyx_t_4 = 0;
        } else {
+1698:                   else pts[:,indin]
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1698, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice__8);
          __Pyx_INCREF(__pyx_v_indin);
          __Pyx_GIVEREF(__pyx_v_indin);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_indin);
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1698, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_27 = __pyx_t_1;
          __pyx_t_1 = 0;
        }
        __Pyx_DECREF_SET(__pyx_v_pts, __pyx_t_27);
        __pyx_t_27 = 0;
+1699:                 Pts = np.concatenate((Pts,pts),axis=1)
        __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        __pyx_t_27 = PyTuple_New(2); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
        PyTuple_SET_ITEM(__pyx_t_27, 0, ((PyObject *)__pyx_v_Pts));
        __Pyx_INCREF(__pyx_v_pts);
        __Pyx_GIVEREF(__pyx_v_pts);
        PyTuple_SET_ITEM(__pyx_t_27, 1, __pyx_v_pts);
        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_27);
        PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_27);
        __pyx_t_27 = 0;
        __pyx_t_27 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        if (PyDict_SetItem(__pyx_t_27, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 1699, __pyx_L1_error)
        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_27); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1699, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1699, __pyx_L1_error)
        __pyx_t_24 = ((PyArrayObject *)__pyx_t_10);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
            }
            __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
          }
          __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1699, __pyx_L1_error)
        }
        __pyx_t_24 = 0;
        __Pyx_DECREF_SET(__pyx_v_Pts, ((PyArrayObject *)__pyx_t_10));
        __pyx_t_10 = 0;
+1700:                 ind = np.concatenate((ind,iind[indin]))
        __Pyx_GetModuleGlobalName(__pyx_t_27, __pyx_n_s_np); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_27, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        __pyx_t_27 = __Pyx_PyObject_GetItem(__pyx_v_iind, __pyx_v_indin); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_INCREF(((PyObject *)__pyx_v_ind));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
        PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_ind));
        __Pyx_GIVEREF(__pyx_t_27);
        PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_27);
        __pyx_t_27 = 0;
        __pyx_t_27 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_27 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_27)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_27);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_10 = (__pyx_t_27) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_27, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_1);
        __Pyx_XDECREF(__pyx_t_27); __pyx_t_27 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1700, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1700, __pyx_L1_error)
        __pyx_t_21 = ((PyArrayObject *)__pyx_t_10);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
            }
            __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
          }
          __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1700, __pyx_L1_error)
        }
        __pyx_t_21 = 0;
        __Pyx_DECREF_SET(__pyx_v_ind, ((PyArrayObject *)__pyx_t_10));
        __pyx_t_10 = 0;
+1701:                 dS = np.concatenate((dS,dY0r*dZ0r*np.ones((indin.sum(),))))
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyFloat_FromDouble((__pyx_v_dY0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_v_indin, __pyx_n_s_sum); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __pyx_t_7 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_26))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_26);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_26, function);
          }
        }
        __pyx_t_9 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_26);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_26 = PyTuple_New(1); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_9)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_9);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_27 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_t_26) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_26);
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_27); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        __pyx_t_27 = PyTuple_New(2); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_27);
        __Pyx_INCREF(((PyObject *)__pyx_v_dS));
        __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
        PyTuple_SET_ITEM(__pyx_t_27, 0, ((PyObject *)__pyx_v_dS));
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_27, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_10 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_27) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_27);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
        if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1701, __pyx_L1_error)
        __pyx_t_25 = ((PyArrayObject *)__pyx_t_10);
        {
          __Pyx_BufFmt_StackElem __pyx_stack[1];
          __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
          __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
          if (unlikely(__pyx_t_15 < 0)) {
            PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
            if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
              Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
              __Pyx_RaiseBufferFallbackError();
            } else {
              PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
            }
            __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
          }
          __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
          if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1701, __pyx_L1_error)
        }
        __pyx_t_25 = 0;
        __Pyx_DECREF_SET(__pyx_v_dS, ((PyArrayObject *)__pyx_t_10));
        __pyx_t_10 = 0;
 1702: 
 1703:     else:
+1704:         Pts, dS, ind,\
  /*else*/ {
+1705:           NL, dLr, Rref = np.ones((3,0)), np.ones((0,)),\
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_27);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_27))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_27);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_27);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_27, function);
      }
    }
    __pyx_t_10 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_27, __pyx_t_1, __pyx_tuple__50) : __Pyx_PyObject_CallOneArg(__pyx_t_27, __pyx_tuple__50);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
    if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_27 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 1705, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_27);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_27) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_27, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1705, __pyx_L1_error)
+1706:           np.ones((0,),dtype=int), np.ones((0,),dtype=int),\
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1706, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__54, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 1706, __pyx_L1_error)
    __pyx_t_26 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__54, __pyx_t_3); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (!(likely(((__pyx_t_26) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_26, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1706, __pyx_L1_error)
+1707:           np.ones((0,)), np.ones((0,))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_1, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_9 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_1, __pyx_tuple__51) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_tuple__51);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1707, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1707, __pyx_L1_error)
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_10);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1704, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_27);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1704, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_27);
    __pyx_t_27 = 0;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1704, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_ind = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_21 = ((PyArrayObject *)__pyx_t_26);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_21, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1705, __pyx_L1_error)
    }
    __pyx_t_21 = 0;
    __pyx_v_NL = ((PyArrayObject *)__pyx_t_26);
    __pyx_t_26 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_3);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1705, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_dLr = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_25 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_25, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_18); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_20);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_18, __pyx_t_19, __pyx_t_20);
        }
        __pyx_t_18 = __pyx_t_19 = __pyx_t_20 = 0;
      }
      __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1705, __pyx_L1_error)
    }
    __pyx_t_25 = 0;
    __pyx_v_Rref = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
+1708:         dXr, dY0r, dZ0r, VPbis = 0., 0., 0., np.ones((3,0))
    __pyx_t_14 = 0.;
    __pyx_t_32 = 0.;
    __pyx_t_33 = 0.;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_26);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_26))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_26);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_26, function);
      }
    }
    __pyx_t_9 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_26, __pyx_t_3, __pyx_tuple__50) : __Pyx_PyObject_CallOneArg(__pyx_t_26, __pyx_tuple__50);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1708, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
    if (!(likely(((__pyx_t_9) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1708, __pyx_L1_error)
    __pyx_v_dXr = __pyx_t_14;
    __pyx_v_dY0r = __pyx_t_32;
    __pyx_v_dZ0r = __pyx_t_33;
    __pyx_t_24 = ((PyArrayObject *)__pyx_t_9);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
      __pyx_t_15 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_24, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_15 < 0)) {
        PyErr_Fetch(&__pyx_t_20, &__pyx_t_19, &__pyx_t_18);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_20); Py_XDECREF(__pyx_t_19); Py_XDECREF(__pyx_t_18);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_20, __pyx_t_19, __pyx_t_18);
        }
        __pyx_t_20 = __pyx_t_19 = __pyx_t_18 = 0;
      }
      __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_15 < 0)) __PYX_ERR(0, 1708, __pyx_L1_error)
    }
    __pyx_t_24 = 0;
    __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_9);
    __pyx_t_9 = 0;
  }
  __pyx_L9:;
 1709: 
+1710:     return Pts, dS, ind, NL, dLr, Rref, dXr, dY0r, dZ0r, VPbis
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_26 = PyFloat_FromDouble(__pyx_v_dY0r); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 1710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_dZ0r); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_ind));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ind));
  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_ind));
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_4, 3, ((PyObject *)__pyx_v_NL));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_4, 4, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_4, 5, ((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_4, 6, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_26);
  PyTuple_SET_ITEM(__pyx_t_4, 7, __pyx_t_26);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 8, __pyx_t_3);
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_4, 9, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_9 = 0;
  __pyx_t_26 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 1711: 
 1712: 
 1713: 
 1714: @cython.cdivision(True)
 1715: @cython.wraparound(False)
 1716: @cython.boundscheck(False)
+1717: def _Ves_Smesh_Lin_SubFromInd_cython(double[::1] XMinMax, double dL, double dX,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_43_Ves_Smesh_Lin_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_42_Ves_Smesh_Lin_SubFromInd_cython[] = " Return the desired surfacic submesh indicated by ind, for the desired resolution (dX,dL) ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_43_Ves_Smesh_Lin_SubFromInd_cython = {"_Ves_Smesh_Lin_SubFromInd_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_43_Ves_Smesh_Lin_SubFromInd_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_42_Ves_Smesh_Lin_SubFromInd_cython};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_43_Ves_Smesh_Lin_SubFromInd_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_XMinMax = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_dL;
  double __pyx_v_dX;
  __Pyx_memviewslice __pyx_v_VPoly = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyArrayObject *__pyx_v_ind = 0;
  double __pyx_v_DIn;
  PyObject *__pyx_v_VIn = 0;
  double __pyx_v_margin;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Lin_SubFromInd_cython (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_XMinMax,&__pyx_n_s_dL,&__pyx_n_s_dX,&__pyx_n_s_VPoly,&__pyx_n_s_ind,&__pyx_n_s_DIn,&__pyx_n_s_VIn,&__pyx_n_s_margin,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_42_Ves_Smesh_Lin_SubFromInd_cython(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_XMinMax, double __pyx_v_dL, double __pyx_v_dX, __Pyx_memviewslice __pyx_v_VPoly, PyArrayObject *__pyx_v_ind, double __pyx_v_DIn, PyObject *__pyx_v_VIn, double __pyx_v_margin) {
  double __pyx_v_dXr;
  double __pyx_v_dY0r;
  double __pyx_v_dZ0r;
  int __pyx_v_NX;
  int __pyx_v_NY0;
  int __pyx_v_NZ0;
  int __pyx_v_Ln;
  int __pyx_v_nii;
  PyObject *__pyx_v_LPts = 0;
  PyObject *__pyx_v_LdS = 0;
  PyArrayObject *__pyx_v_Pts = 0;
  PyArrayObject *__pyx_v_PtsCross = 0;
  PyArrayObject *__pyx_v_VPbis = 0;
  PyArrayObject *__pyx_v_X = 0;
  PyArrayObject *__pyx_v_Y0 = 0;
  PyArrayObject *__pyx_v_Z0 = 0;
  PyArrayObject *__pyx_v_dS = 0;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_Rref = 0;
  PyArrayObject *__pyx_v_indX = 0;
  PyArrayObject *__pyx_v_indY0 = 0;
  PyArrayObject *__pyx_v_indZ0 = 0;
  PyArrayObject *__pyx_v_indL = 0;
  PyArrayObject *__pyx_v_NL = 0;
  PyArrayObject *__pyx_v_ii = 0;
  CYTHON_UNUSED PyObject *__pyx_v_bla = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_NL;
  __Pyx_Buffer __pyx_pybuffer_NL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Pts;
  __Pyx_Buffer __pyx_pybuffer_Pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PtsCross;
  __Pyx_Buffer __pyx_pybuffer_PtsCross;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Rref;
  __Pyx_Buffer __pyx_pybuffer_Rref;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPbis;
  __Pyx_Buffer __pyx_pybuffer_VPbis;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_X;
  __Pyx_Buffer __pyx_pybuffer_X;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Y0;
  __Pyx_Buffer __pyx_pybuffer_Y0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Z0;
  __Pyx_Buffer __pyx_pybuffer_Z0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dS;
  __Pyx_Buffer __pyx_pybuffer_dS;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ii;
  __Pyx_Buffer __pyx_pybuffer_ii;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ind;
  __Pyx_Buffer __pyx_pybuffer_ind;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indL;
  __Pyx_Buffer __pyx_pybuffer_indL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indX;
  __Pyx_Buffer __pyx_pybuffer_indX;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indY0;
  __Pyx_Buffer __pyx_pybuffer_indY0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indZ0;
  __Pyx_Buffer __pyx_pybuffer_indZ0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Ves_Smesh_Lin_SubFromInd_cython", 0);
  __pyx_pybuffer_Pts.pybuffer.buf = NULL;
  __pyx_pybuffer_Pts.refcount = 0;
  __pyx_pybuffernd_Pts.data = NULL;
  __pyx_pybuffernd_Pts.rcbuffer = &__pyx_pybuffer_Pts;
  __pyx_pybuffer_PtsCross.pybuffer.buf = NULL;
  __pyx_pybuffer_PtsCross.refcount = 0;
  __pyx_pybuffernd_PtsCross.data = NULL;
  __pyx_pybuffernd_PtsCross.rcbuffer = &__pyx_pybuffer_PtsCross;
  __pyx_pybuffer_VPbis.pybuffer.buf = NULL;
  __pyx_pybuffer_VPbis.refcount = 0;
  __pyx_pybuffernd_VPbis.data = NULL;
  __pyx_pybuffernd_VPbis.rcbuffer = &__pyx_pybuffer_VPbis;
  __pyx_pybuffer_X.pybuffer.buf = NULL;
  __pyx_pybuffer_X.refcount = 0;
  __pyx_pybuffernd_X.data = NULL;
  __pyx_pybuffernd_X.rcbuffer = &__pyx_pybuffer_X;
  __pyx_pybuffer_Y0.pybuffer.buf = NULL;
  __pyx_pybuffer_Y0.refcount = 0;
  __pyx_pybuffernd_Y0.data = NULL;
  __pyx_pybuffernd_Y0.rcbuffer = &__pyx_pybuffer_Y0;
  __pyx_pybuffer_Z0.pybuffer.buf = NULL;
  __pyx_pybuffer_Z0.refcount = 0;
  __pyx_pybuffernd_Z0.data = NULL;
  __pyx_pybuffernd_Z0.rcbuffer = &__pyx_pybuffer_Z0;
  __pyx_pybuffer_dS.pybuffer.buf = NULL;
  __pyx_pybuffer_dS.refcount = 0;
  __pyx_pybuffernd_dS.data = NULL;
  __pyx_pybuffernd_dS.rcbuffer = &__pyx_pybuffer_dS;
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_Rref.pybuffer.buf = NULL;
  __pyx_pybuffer_Rref.refcount = 0;
  __pyx_pybuffernd_Rref.data = NULL;
  __pyx_pybuffernd_Rref.rcbuffer = &__pyx_pybuffer_Rref;
  __pyx_pybuffer_indX.pybuffer.buf = NULL;
  __pyx_pybuffer_indX.refcount = 0;
  __pyx_pybuffernd_indX.data = NULL;
  __pyx_pybuffernd_indX.rcbuffer = &__pyx_pybuffer_indX;
  __pyx_pybuffer_indY0.pybuffer.buf = NULL;
  __pyx_pybuffer_indY0.refcount = 0;
  __pyx_pybuffernd_indY0.data = NULL;
  __pyx_pybuffernd_indY0.rcbuffer = &__pyx_pybuffer_indY0;
  __pyx_pybuffer_indZ0.pybuffer.buf = NULL;
  __pyx_pybuffer_indZ0.refcount = 0;
  __pyx_pybuffernd_indZ0.data = NULL;
  __pyx_pybuffernd_indZ0.rcbuffer = &__pyx_pybuffer_indZ0;
  __pyx_pybuffer_indL.pybuffer.buf = NULL;
  __pyx_pybuffer_indL.refcount = 0;
  __pyx_pybuffernd_indL.data = NULL;
  __pyx_pybuffernd_indL.rcbuffer = &__pyx_pybuffer_indL;
  __pyx_pybuffer_NL.pybuffer.buf = NULL;
  __pyx_pybuffer_NL.refcount = 0;
  __pyx_pybuffernd_NL.data = NULL;
  __pyx_pybuffernd_NL.rcbuffer = &__pyx_pybuffer_NL;
  __pyx_pybuffer_ii.pybuffer.buf = NULL;
  __pyx_pybuffer_ii.refcount = 0;
  __pyx_pybuffernd_ii.data = NULL;
  __pyx_pybuffernd_ii.rcbuffer = &__pyx_pybuffer_ii;
  __pyx_pybuffer_ind.pybuffer.buf = NULL;
  __pyx_pybuffer_ind.refcount = 0;
  __pyx_pybuffernd_ind.data = NULL;
  __pyx_pybuffernd_ind.rcbuffer = &__pyx_pybuffer_ind;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ind.rcbuffer->pybuffer, (PyObject*)__pyx_v_ind, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 1717, __pyx_L1_error)
  }
  __pyx_pybuffernd_ind.diminfo[0].strides = __pyx_pybuffernd_ind.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ind.diminfo[0].shape = __pyx_pybuffernd_ind.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ii.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Lin_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ii.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ind.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_LPts);
  __Pyx_XDECREF(__pyx_v_LdS);
  __Pyx_XDECREF((PyObject *)__pyx_v_Pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_PtsCross);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPbis);
  __Pyx_XDECREF((PyObject *)__pyx_v_X);
  __Pyx_XDECREF((PyObject *)__pyx_v_Y0);
  __Pyx_XDECREF((PyObject *)__pyx_v_Z0);
  __Pyx_XDECREF((PyObject *)__pyx_v_dS);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_Rref);
  __Pyx_XDECREF((PyObject *)__pyx_v_indX);
  __Pyx_XDECREF((PyObject *)__pyx_v_indY0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indZ0);
  __Pyx_XDECREF((PyObject *)__pyx_v_indL);
  __Pyx_XDECREF((PyObject *)__pyx_v_NL);
  __Pyx_XDECREF((PyObject *)__pyx_v_ii);
  __Pyx_XDECREF(__pyx_v_bla);
  __PYX_XDEC_MEMVIEW(&__pyx_v_XMinMax, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPoly, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__200 = PyTuple_Pack(35, __pyx_n_s_XMinMax, __pyx_n_s_dL, __pyx_n_s_dX, __pyx_n_s_VPoly, __pyx_n_s_ind, __pyx_n_s_DIn, __pyx_n_s_VIn, __pyx_n_s_margin, __pyx_n_s_dXr, __pyx_n_s_dY0r, __pyx_n_s_dZ0r, __pyx_n_s_NX, __pyx_n_s_NY0, __pyx_n_s_NZ0, __pyx_n_s_Ln, __pyx_n_s_NR0, __pyx_n_s_nii, __pyx_n_s_LPts, __pyx_n_s_LdS, __pyx_n_s_Pts, __pyx_n_s_PtsCross, __pyx_n_s_VPbis, __pyx_n_s_X, __pyx_n_s_Y0, __pyx_n_s_Z0, __pyx_n_s_dS, __pyx_n_s_dLr, __pyx_n_s_Rref, __pyx_n_s_indX, __pyx_n_s_indY0, __pyx_n_s_indZ0, __pyx_n_s_indL, __pyx_n_s_NL, __pyx_n_s_ii, __pyx_n_s_bla); if (unlikely(!__pyx_tuple__200)) __PYX_ERR(0, 1717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__200);
  __Pyx_GIVEREF(__pyx_tuple__200);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_43_Ves_Smesh_Lin_SubFromInd_cython, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Ves_Smesh_Lin_SubFromInd_cython, __pyx_t_1) < 0) __PYX_ERR(0, 1717, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__201 = (PyObject*)__Pyx_PyCode_New(8, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__200, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Ves_Smesh_Lin_SubFromInd_cython, 1717, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__201)) __PYX_ERR(0, 1717, __pyx_L1_error)
 1718:                                      double[:,::1] VPoly, np.ndarray[long,ndim=1] ind,
+1719:                                      double DIn=0., VIn=None, double margin=_VSMALL):
    values[6] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_XMinMax)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromInd_cython", 0, 5, 8, 1); __PYX_ERR(0, 1717, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dX)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromInd_cython", 0, 5, 8, 2); __PYX_ERR(0, 1717, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromInd_cython", 0, 5, 8, 3); __PYX_ERR(0, 1717, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ind)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromInd_cython", 0, 5, 8, 4); __PYX_ERR(0, 1717, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DIn);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_margin);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_Ves_Smesh_Lin_SubFromInd_cython") < 0)) __PYX_ERR(0, 1717, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_XMinMax = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_XMinMax.memview)) __PYX_ERR(0, 1717, __pyx_L3_error)
    __pyx_v_dL = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dL == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1717, __pyx_L3_error)
    __pyx_v_dX = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_dX == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1717, __pyx_L3_error)
    __pyx_v_VPoly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_VPoly.memview)) __PYX_ERR(0, 1718, __pyx_L3_error)
    __pyx_v_ind = ((PyArrayObject *)values[4]);
    if (values[5]) {
      __pyx_v_DIn = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_DIn == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1719, __pyx_L3_error)
    } else {
      __pyx_v_DIn = ((double)0.);
    }
    __pyx_v_VIn = values[6];
    if (values[7]) {
      __pyx_v_margin = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_margin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1719, __pyx_L3_error)
    } else {
      __pyx_v_margin = __pyx_k__57;
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_Ves_Smesh_Lin_SubFromInd_cython", 0, 5, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1717, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03._Ves_Smesh_Lin_SubFromInd_cython", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ind), __pyx_ptype_5numpy_ndarray, 1, "ind", 0))) __PYX_ERR(0, 1718, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_42_Ves_Smesh_Lin_SubFromInd_cython(__pyx_self, __pyx_v_XMinMax, __pyx_v_dL, __pyx_v_dX, __pyx_v_VPoly, __pyx_v_ind, __pyx_v_DIn, __pyx_v_VIn, __pyx_v_margin);
/* … */
  __pyx_k__57 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1720:     " Return the desired surfacic submesh indicated by ind, for the desired resolution (dX,dL) "
 1721:     cdef double dXr, dY0r, dZ0r
 1722:     cdef int NX, NY0, NZ0, Ln, NR0, nii
 1723:     cdef list LPts, LdS
 1724:     cdef np.ndarray[double,ndim=2] Pts, PtsCross, VPbis
 1725:     cdef np.ndarray[double,ndim=1] X, Y0, Z0, dS, dLr, Rref
 1726:     cdef np.ndarray[long,ndim=1] indX, indY0, indZ0, indL, NL, ii
 1727: 
 1728:     # Get the mesh for the faces
+1729:     Y0, dY0r, bla, NY0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[0,:]),np.max(VPoly[0,:])]), dL, DL=None, Lim=True, margin=margin)
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_min); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7.data = __pyx_v_VPoly.data;
  __pyx_t_7.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1729, __pyx_L1_error)
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_7.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_7, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_3 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_8, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_max); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7.data = __pyx_v_VPoly.data;
  __pyx_t_7.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1729, __pyx_L1_error)
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_7.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_7, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyList_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_8);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 1729, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1729, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_margin, __pyx_t_2) < 0) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1729, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_6);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_8,&__pyx_t_1,&__pyx_t_6};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1729, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_8,&__pyx_t_1,&__pyx_t_6};
    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1729, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_3)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_3); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_3), 4) < 0) __PYX_ERR(0, 1729, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1729, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1729, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_8); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1729, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer);
    __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_14 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Y0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Y0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_Y0.diminfo[0].strides = __pyx_pybuffernd_Y0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Y0.diminfo[0].shape = __pyx_pybuffernd_Y0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1729, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_Y0 = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_v_dY0r = __pyx_t_11;
  __pyx_v_bla = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_NY0 = __pyx_t_12;
+1730:     Z0, dZ0r, bla, NZ0 = _Ves_mesh_dlfromL_cython(np.array([np.min(VPoly[1,:]),np.max(VPoly[1,:])]), dL, DL=None, Lim=True, margin=margin)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7.data = __pyx_v_VPoly.data;
  __pyx_t_7.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1730, __pyx_L1_error)
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_7.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_7, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_max); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7.data = __pyx_v_VPoly.data;
  __pyx_t_7.memview = __pyx_v_VPoly.memview;
  __PYX_INC_MEMVIEW(&__pyx_t_7, 0);
  {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 1730, __pyx_L1_error)
        __pyx_t_7.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_7.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_7.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_7.suboffsets[0] = -1;

__pyx_t_4 = __pyx_memoryview_fromslice(__pyx_t_7, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
  __pyx_t_6 = 0;
  __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 1730, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1730, __pyx_L1_error)
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_margin, __pyx_t_6) < 0) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1730, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_5,&__pyx_t_2,&__pyx_t_3};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1730, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_5,&__pyx_t_2,&__pyx_t_3};
    __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1730, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_1); if (unlikely(!item)) goto __pyx_L5_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1730, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1730, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1730, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1730, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer);
    __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_14 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Z0.rcbuffer->pybuffer, (PyObject*)__pyx_v_Z0, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_Z0.diminfo[0].strides = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Z0.diminfo[0].shape = __pyx_pybuffernd_Z0.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1730, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_Z0 = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_dZ0r = __pyx_t_11;
  __Pyx_DECREF_SET(__pyx_v_bla, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_v_NZ0 = __pyx_t_12;
 1731: 
 1732:     # Get the actual R and Z resolutions and mesh elements
+1733:     X, dXr, bla, NX = _Ves_mesh_dlfromL_cython(XMinMax, dX, DL=None, Lim=True, margin=margin)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Ves_mesh_dlfromL_cython); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_XMinMax, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_DL, Py_None) < 0) __PYX_ERR(0, 1733, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_Lim, Py_True) < 0) __PYX_ERR(0, 1733, __pyx_L1_error)
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_margin, __pyx_t_3) < 0) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1733, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_8);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_6,&__pyx_t_8};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1733, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_5,&__pyx_t_6,&__pyx_t_8};
    __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1733, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext;
    for (index=0; index < 4; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_1); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_1), 4) < 0) __PYX_ERR(0, 1733, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1733, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1733, __pyx_L1_error)
  __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_8); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1733, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_X.rcbuffer->pybuffer);
    __pyx_t_14 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_14 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_X.rcbuffer->pybuffer, (PyObject*)__pyx_v_X, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_X.diminfo[0].strides = __pyx_pybuffernd_X.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_X.diminfo[0].shape = __pyx_pybuffernd_X.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_14 < 0)) __PYX_ERR(0, 1733, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_X = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_v_dXr = __pyx_t_11;
  __Pyx_DECREF_SET(__pyx_v_bla, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_v_NX = __pyx_t_12;
+1734:     PtsCross, dLr, bla, NL, Rref, VPbis = _Ves_Smesh_Cross(VPoly, dL, D1=None, D2=None, margin=margin, DIn=DIn, VIn=VIn)
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Ves_Smesh_Cross); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __pyx_memoryview_fromslice(__pyx_v_VPoly, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_8 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_D1, Py_None) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_D2, Py_None) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_margin); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_margin, __pyx_t_8) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_DIn); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_DIn, __pyx_t_8) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_VIn, __pyx_v_VIn) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1734, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
    PyObject* sequence = __pyx_t_8;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 6)) {
      if (size > 6) __Pyx_RaiseTooManyValuesError(6);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1734, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 2); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 4); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 5); 
    } else {
      __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 2); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 3); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 4); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 5); 
    }
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_4);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[6] = {&__pyx_t_6,&__pyx_t_5,&__pyx_t_3,&__pyx_t_2,&__pyx_t_1,&__pyx_t_4};
      for (i=0; i < 6; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1734, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else {
    Py_ssize_t index = -1;
    PyObject** temps[6] = {&__pyx_t_6,&__pyx_t_5,&__pyx_t_3,&__pyx_t_2,&__pyx_t_1,&__pyx_t_4};
    __pyx_t_9 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1734, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    for (index=0; index < 6; index++) {
      PyObject* item = __pyx_t_10(__pyx_t_9); if (unlikely(!item)) goto __pyx_L9_unpacking_failed;
      __Pyx_GOTREF(item);
      *(temps[index]) = item;
    }
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 6) < 0) __PYX_ERR(0, 1734, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1734, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1734, __pyx_L1_error)
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1734, __pyx_L1_error)
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1734, __pyx_L1_error)
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1734, __pyx_L1_error)
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1734, __pyx_L1_error)
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PtsCross.rcbuffer->pybuffer, (PyObject*)__pyx_v_PtsCross, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_PtsCross.diminfo[0].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PtsCross.diminfo[0].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PtsCross.diminfo[1].strides = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PtsCross.diminfo[1].shape = __pyx_pybuffernd_PtsCross.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1734, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_PtsCross = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dLr, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1734, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_dLr = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_bla, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_NL.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_NL.rcbuffer->pybuffer, (PyObject*)__pyx_v_NL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_NL.diminfo[0].strides = __pyx_pybuffernd_NL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_NL.diminfo[0].shape = __pyx_pybuffernd_NL.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1734, __pyx_L1_error)
  }
  __pyx_t_19 = 0;
  __pyx_v_NL = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_13 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Rref.rcbuffer->pybuffer, (PyObject*)__pyx_v_Rref, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_Rref.diminfo[0].strides = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Rref.diminfo[0].shape = __pyx_pybuffernd_Rref.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1734, __pyx_L1_error)
  }
  __pyx_t_13 = 0;
  __pyx_v_Rref = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_18 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPbis.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPbis, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_VPbis.diminfo[0].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPbis.diminfo[0].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPbis.diminfo[1].strides = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPbis.diminfo[1].shape = __pyx_pybuffernd_VPbis.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1734, __pyx_L1_error)
  }
  __pyx_t_18 = 0;
  __pyx_v_VPbis = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+1735:     Ln = PtsCross.shape[1]
  __pyx_v_Ln = (__pyx_v_PtsCross->dimensions[1]);
 1736: 
+1737:     LPts, LdS = [], []
  __pyx_t_8 = PyList_New(0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1737, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_LPts = ((PyObject*)__pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_v_LdS = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
 1738:     # First face
+1739:     ii = (ind<NY0*NZ0).nonzero()[0]
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1739, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1739, __pyx_L1_error)
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ii.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_v_ii, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_ii.diminfo[0].strides = __pyx_pybuffernd_ii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ii.diminfo[0].shape = __pyx_pybuffernd_ii.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1739, __pyx_L1_error)
  }
  __pyx_t_19 = 0;
  __pyx_v_ii = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
+1740:     nii = len(ii)
  __pyx_t_20 = PyObject_Length(((PyObject *)__pyx_v_ii)); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1740, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_20;
+1741:     if nii>0:
  __pyx_t_21 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_21) {
/* … */
  }
+1742:         indZ0 = ind[ii] // NY0
    __pyx_t_8 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyNumber_FloorDivide(__pyx_t_8, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1742, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1742, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __pyx_v_indZ0 = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
+1743:         indY0 = (ind[ii]-indZ0*NY0)
    __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = PyNumber_Multiply(((PyObject *)__pyx_v_indZ0), __pyx_t_4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Subtract(__pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1743, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_4);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indY0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
        }
        __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
      }
      __pyx_pybuffernd_indY0.diminfo[0].strides = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indY0.diminfo[0].shape = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1743, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __pyx_v_indY0 = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;
+1744:         if nii==1:
    __pyx_t_21 = ((__pyx_v_nii == 1) != 0);
    if (__pyx_t_21) {
/* … */
      goto __pyx_L12;
    }
+1745:             LPts.append( np.array([[XMinMax[0]+DIn], [Y0[indY0]], [Z0[indZ0]]]) )
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_22 = 0;
      __pyx_t_8 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_22)) ))) + __pyx_v_DIn)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Y0), ((PyObject *)__pyx_v_indY0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = PyList_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_3);
      PyList_SET_ITEM(__pyx_t_8, 1, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_8, 2, __pyx_t_5);
      __pyx_t_2 = 0;
      __pyx_t_3 = 0;
      __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_4); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1745, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 1746:         else:
+1747:             LPts.append( np.array([(XMinMax[0]+DIn)*np.ones((nii,)), Y0[indY0], Z0[indZ0]]) )
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_24 = 0;
      __pyx_t_1 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_24)) ))) + __pyx_v_DIn)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Y0), ((PyObject *)__pyx_v_indY0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_1);
      PyList_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
      __pyx_t_2 = 0;
      __pyx_t_5 = 0;
      __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_4); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1747, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __pyx_L12:;
+1748:         LdS.append( dY0r*dZ0r*np.ones((nii,)) )
    __pyx_t_4 = PyFloat_FromDouble((__pyx_v_dY0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_nii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_8 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_1); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1748, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1749: 
 1750:     # Cylinder
+1751:     ii = ((ind>=NY0*NZ0) & (ind<NY0*NZ0+NX*Ln)).nonzero()[0]
  __pyx_t_8 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_8, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(((__pyx_v_NY0 * __pyx_v_NZ0) + (__pyx_v_NX * __pyx_v_Ln))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_5 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyNumber_And(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1751, __pyx_L1_error)
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ii.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_v_ii, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_ii.diminfo[0].strides = __pyx_pybuffernd_ii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ii.diminfo[0].shape = __pyx_pybuffernd_ii.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1751, __pyx_L1_error)
  }
  __pyx_t_19 = 0;
  __Pyx_DECREF_SET(__pyx_v_ii, ((PyArrayObject *)__pyx_t_5));
  __pyx_t_5 = 0;
+1752:     nii = len(ii)
  __pyx_t_20 = PyObject_Length(((PyObject *)__pyx_v_ii)); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1752, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_20;
+1753:     if nii>0:
  __pyx_t_21 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_21) {
/* … */
  }
+1754:         indX = (ind[ii]-NY0*NZ0) // Ln
    __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyNumber_FloorDivide(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1754, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indX.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indX.rcbuffer->pybuffer, (PyObject*)__pyx_v_indX, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
        }
        __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
      }
      __pyx_pybuffernd_indX.diminfo[0].strides = __pyx_pybuffernd_indX.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indX.diminfo[0].shape = __pyx_pybuffernd_indX.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1754, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __pyx_v_indX = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
+1755:         indL = (ind[ii]-NY0*NZ0 - Ln*indX)
    __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8 = PyNumber_Subtract(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Ln); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, ((PyObject *)__pyx_v_indX)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_8, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1755, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indL.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indL.rcbuffer->pybuffer, (PyObject*)__pyx_v_indL, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_indL.diminfo[0].strides = __pyx_pybuffernd_indL.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indL.diminfo[0].shape = __pyx_pybuffernd_indL.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1755, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __pyx_v_indL = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
+1756:         if nii==1:
    __pyx_t_21 = ((__pyx_v_nii == 1) != 0);
    if (__pyx_t_21) {
/* … */
      goto __pyx_L14;
    }
+1757:             LPts.append( np.array([[X[indX]], [PtsCross[0,indL]], [PtsCross[1,indL]]]) )
      __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_array); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_X), ((PyObject *)__pyx_v_indX)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
      __Pyx_INCREF(((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indL));
      PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_indL));
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_GIVEREF(__pyx_int_1);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indL));
      PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_indL));
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_2, 2, __pyx_t_6);
      __pyx_t_4 = 0;
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;
      __pyx_t_6 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_6)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_6);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
        }
      }
      __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_1); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1757, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1758:             LdS.append( np.array([dXr*dLr[indL]]) )
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), ((PyObject *)__pyx_v_indL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_5);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_1); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1758, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1759:         else:
+1760:             LPts.append( np.array([X[indX], PtsCross[0,indL], PtsCross[1,indL]]) )
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_X), ((PyObject *)__pyx_v_indX)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
      __Pyx_INCREF(((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indL));
      PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_indL));
      __pyx_t_8 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_GIVEREF(__pyx_int_1);
      PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_1);
      __Pyx_INCREF(((PyObject *)__pyx_v_indL));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_indL));
      PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_indL));
      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_PtsCross), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyList_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_5, 1, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
      __pyx_t_2 = 0;
      __pyx_t_8 = 0;
      __pyx_t_4 = 0;
      __pyx_t_4 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_5);
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_1); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1760, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1761:             LdS.append( dXr*dLr[indL] )
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1761, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_dLr), ((PyObject *)__pyx_v_indL)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1761, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1761, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_5); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1761, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L14:;
 1762: 
 1763:     # End face
+1764:     ii = (ind >= NY0*NZ0+NX*Ln).nonzero()[0]
  __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_NY0 * __pyx_v_NZ0) + (__pyx_v_NX * __pyx_v_Ln))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_ind), __pyx_t_6, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1764, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1764, __pyx_L1_error)
  __pyx_t_19 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ii.rcbuffer->pybuffer);
    __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
    if (unlikely(__pyx_t_12 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ii.rcbuffer->pybuffer, (PyObject*)__pyx_v_ii, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_ii.diminfo[0].strides = __pyx_pybuffernd_ii.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ii.diminfo[0].shape = __pyx_pybuffernd_ii.rcbuffer->pybuffer.shape[0];
    if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1764, __pyx_L1_error)
  }
  __pyx_t_19 = 0;
  __Pyx_DECREF_SET(__pyx_v_ii, ((PyArrayObject *)__pyx_t_6));
  __pyx_t_6 = 0;
+1765:     nii = len(ii)
  __pyx_t_20 = PyObject_Length(((PyObject *)__pyx_v_ii)); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1765, __pyx_L1_error)
  __pyx_v_nii = __pyx_t_20;
+1766:     if nii>0:
  __pyx_t_21 = ((__pyx_v_nii > 0) != 0);
  if (__pyx_t_21) {
/* … */
  }
+1767:         indZ0 = (ind[ii]-NY0*NZ0-NX*Ln) // NY0
    __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_Ln)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyNumber_FloorDivide(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1767, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_1);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indZ0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indZ0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_indZ0.diminfo[0].strides = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indZ0.diminfo[0].shape = __pyx_pybuffernd_indZ0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1767, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __Pyx_XDECREF_SET(__pyx_v_indZ0, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;
+1768:         indY0 = ind[ii]-NY0*NZ0-NX*Ln - NY0*indZ0
    __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_ind), ((PyObject *)__pyx_v_ii)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NY0 * __pyx_v_NZ0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_Subtract(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_int((__pyx_v_NX * __pyx_v_Ln)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_1 = PyNumber_Subtract(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_NY0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyNumber_Multiply(__pyx_t_5, ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Subtract(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1768, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1768, __pyx_L1_error)
    __pyx_t_19 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_t_19, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indY0.rcbuffer->pybuffer, (PyObject*)__pyx_v_indY0, &__Pyx_TypeInfo_long, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
        }
        __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
      }
      __pyx_pybuffernd_indY0.diminfo[0].strides = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indY0.diminfo[0].shape = __pyx_pybuffernd_indY0.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1768, __pyx_L1_error)
    }
    __pyx_t_19 = 0;
    __Pyx_XDECREF_SET(__pyx_v_indY0, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;
+1769:         if nii==1:
    __pyx_t_21 = ((__pyx_v_nii == 1) != 0);
    if (__pyx_t_21) {
/* … */
      goto __pyx_L16;
    }
+1770:             LPts.append( np.array([[XMinMax[1]-DIn], [Y0[indY0]], [Z0[indZ0]]]) )
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_array); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_25 = 1;
      __pyx_t_6 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_25)) ))) - __pyx_v_DIn)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Y0), ((PyObject *)__pyx_v_indY0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = PyList_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_6);
      PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_8);
      PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_6, 2, __pyx_t_2);
      __pyx_t_4 = 0;
      __pyx_t_8 = 0;
      __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_5); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 1771:         else:
+1772:             LPts.append( np.array([(XMinMax[1]-DIn)*np.ones((nii,)), Y0[indY0], Z0[indZ0]]) )
    /*else*/ {
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_26 = 1;
      __pyx_t_1 = PyFloat_FromDouble(((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_XMinMax.data) + __pyx_t_26)) ))) - __pyx_v_DIn)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_nii); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_4, function);
        }
      }
      __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Y0), ((PyObject *)__pyx_v_indY0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Z0), ((PyObject *)__pyx_v_indZ0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_4);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_2);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_1);
      PyList_SET_ITEM(__pyx_t_3, 2, __pyx_t_1);
      __pyx_t_4 = 0;
      __pyx_t_2 = 0;
      __pyx_t_1 = 0;
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_6, function);
        }
      }
      __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LPts, __pyx_t_5); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1772, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __pyx_L16:;
+1773:         LdS.append( dY0r*dZ0r*np.ones((nii,)) )
    __pyx_t_5 = PyFloat_FromDouble((__pyx_v_dY0r * __pyx_v_dZ0r)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_6 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_23 = __Pyx_PyList_Append(__pyx_v_LdS, __pyx_t_1); if (unlikely(__pyx_t_23 == ((int)-1))) __PYX_ERR(0, 1773, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 1774: 
 1775:     # Format output
+1776:     if len(LPts)==1:
  __pyx_t_20 = PyList_GET_SIZE(__pyx_v_LPts); if (unlikely(__pyx_t_20 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1776, __pyx_L1_error)
  __pyx_t_21 = ((__pyx_t_20 == 1) != 0);
  if (__pyx_t_21) {
/* … */
    goto __pyx_L17;
  }
+1777:         Pts, dS = LPts[0], LdS[0]
    if (!(likely(((PyList_GET_ITEM(__pyx_v_LPts, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LPts, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1777, __pyx_L1_error)
    __pyx_t_1 = PyList_GET_ITEM(__pyx_v_LPts, 0);
    __Pyx_INCREF(__pyx_t_1);
    if (!(likely(((PyList_GET_ITEM(__pyx_v_LdS, 0)) == Py_None) || likely(__Pyx_TypeTest(PyList_GET_ITEM(__pyx_v_LdS, 0), __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1777, __pyx_L1_error)
    __pyx_t_6 = PyList_GET_ITEM(__pyx_v_LdS, 0);
    __Pyx_INCREF(__pyx_t_6);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_1), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1777, __pyx_L1_error)
    }
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_6), &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
        }
        __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1777, __pyx_L1_error)
    }
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_6);
    __pyx_t_6 = 0;
 1778:     else:
+1779:         Pts = np.concatenate(tuple(LPts),axis=1)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyList_AsTuple(__pyx_v_LPts); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_1) < 0) __PYX_ERR(0, 1779, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1779, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1779, __pyx_L1_error)
    __pyx_t_18 = ((PyArrayObject *)__pyx_t_2);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_18, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_Pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
        }
        __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
      }
      __pyx_pybuffernd_Pts.diminfo[0].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Pts.diminfo[0].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Pts.diminfo[1].strides = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Pts.diminfo[1].shape = __pyx_pybuffernd_Pts.rcbuffer->pybuffer.shape[1];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1779, __pyx_L1_error)
    }
    __pyx_t_18 = 0;
    __pyx_v_Pts = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
+1780:         dS = np.concatenate(tuple(LdS))
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_concatenate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyList_AsTuple(__pyx_v_LdS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1780, __pyx_L1_error)
    __pyx_t_13 = ((PyArrayObject *)__pyx_t_2);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dS.rcbuffer->pybuffer);
      __pyx_t_12 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_t_13, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_12 < 0)) {
        PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dS.rcbuffer->pybuffer, (PyObject*)__pyx_v_dS, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
        }
        __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
      }
      __pyx_pybuffernd_dS.diminfo[0].strides = __pyx_pybuffernd_dS.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dS.diminfo[0].shape = __pyx_pybuffernd_dS.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 1780, __pyx_L1_error)
    }
    __pyx_t_13 = 0;
    __pyx_v_dS = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L17:;
 1781: 
+1782:     return Pts, dS, NL, dLr, Rref, dXr, dY0r, dZ0r, VPbis
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dXr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dY0r); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dZ0r); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1782, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_Pts));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pts));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_Pts));
  __Pyx_INCREF(((PyObject *)__pyx_v_dS));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dS));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_dS));
  __Pyx_INCREF(((PyObject *)__pyx_v_NL));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_NL));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_NL));
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_dLr));
  __Pyx_INCREF(((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rref));
  PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_v_Rref));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_6);
  __Pyx_INCREF(((PyObject *)__pyx_v_VPbis));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_VPbis));
  PyTuple_SET_ITEM(__pyx_t_1, 8, ((PyObject *)__pyx_v_VPbis));
  __pyx_t_2 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1783: 
 1784: 
 1785: 
 1786: 
 1787: """
 1788: ########################################################
 1789: ########################################################
 1790: ########################################################
 1791: #                       LOS-specific
 1792: ########################################################
 1793: ########################################################
 1794: ########################################################
 1795: """
 1796: 
 1797: 
 1798: 
 1799: 
 1800: ########################################################
 1801: ########################################################
 1802: #       PIn POut
 1803: ########################################################
 1804: 
 1805: 
 1806: # =============================================================================
 1807: # = Set of functions for Ray-tracing
 1808: # =============================================================================
 1809: 
+1810: def LOS_Calc_PInOut_VesStruct(double[:, ::1] ray_orig,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_45LOS_Calc_PInOut_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_44LOS_Calc_PInOut_VesStruct[] = "\n    Computes the entry and exit point of all provided LOS for the provided\n    vessel polygon (toroidal or linear) with its associated structures.\n    Return the normal vector at impact and the index of the impact segment\n\n    Params\n    ======\n    ray_orig : (3, num_los) double array\n       LOS origin points coordinates\n    ray_vdir : (3, num_los) double array\n       LOS normalized direction vector\n    ves_poly : (2, num_vertex) double array\n       Coordinates of the vertices of the Polygon defining the 2D poloidal\n       cut of the Vessel\n    ves_norm : (2, num_vertex-1) double array\n       Normal vectors going \"inwards\" of the edges of the Polygon defined\n       by ves_poly\n    nstruct : int\n       Total number of structures (counting each limited structure as one)\n    ves_lims : array\n       Contains the limits min and max of vessel\n    lstruct_poly : list\n       List of coordinates of the vertices of all structures on poloidal plane\n    lstruct_lims : list\n       List of limits of all structures\n    lstruct_nlim : array of ints\n       List of number of limits for all structures\n    lstruct_norm : list\n       List of coordinates of \"inwards\" normal vectors of the polygon of all\n       the structures\n    rmin : double\n       Minimal radius of vessel to take into consideration\n    eps_<val> : double\n       Small value, acceptance of error\n    vtype : string\n       Type of vessel (\"Tor\" or \"Lin\")\n    forbid : bool\n       Should we forbid values behind vissible radius ? (see rmin)\n    test : bool\n       Should we run tests ?\n    num_threads : int\n       The num_threads argument indicates how many threads the team should\n       consist of. If not given, OpenMP will decide how many threads to use.\n       Typically this is the number of cores available on the machine.\n    Returns\n    ======\n    coeff_inter_in : (num_los) array\n       scalars level of \"in\" intersection of the LOS (if k=0 at origin)\n    coeff_int""er_out : (num_los) array\n       scalars level of \"out\" intersection of the LOS (if k=0 at origin)\n    vperp_out : (3, num_los) array\n       Coordinates of the normal vector of impact of the LOS (NaN if none)\n    ind_inter_out : (3, num_los)\n       Index of structure impacted by LOS: ind_inter_out[:,ind_los]=(i,j,k)\n       where k is the index of edge impacted on the j-th sub structure of the\n       structure number i. If the LOS impacted the vessel i=j=0\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_45LOS_Calc_PInOut_VesStruct = {"LOS_Calc_PInOut_VesStruct", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_45LOS_Calc_PInOut_VesStruct, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_44LOS_Calc_PInOut_VesStruct};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_45LOS_Calc_PInOut_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_ray_orig = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ray_vdir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_poly = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_norm = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lstruct_nlim = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_lims = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lstruct_polyx = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lstruct_polyy = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_lstruct_lims = 0;
  __Pyx_memviewslice __pyx_v_lstruct_normx = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lstruct_normy = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lnvert = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_nstruct_tot;
  int __pyx_v_nstruct_lim;
  double __pyx_v_rmin;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  int __pyx_v_forbid;
  int __pyx_v_test;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_Calc_PInOut_VesStruct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_ves_norm,&__pyx_n_s_lstruct_nlim,&__pyx_n_s_ves_lims,&__pyx_n_s_lstruct_polyx,&__pyx_n_s_lstruct_polyy,&__pyx_n_s_lstruct_lims,&__pyx_n_s_lstruct_normx,&__pyx_n_s_lstruct_normy,&__pyx_n_s_lnvert,&__pyx_n_s_nstruct_tot,&__pyx_n_s_nstruct_lim,&__pyx_n_s_rmin,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_forbid,&__pyx_n_s_test,&__pyx_n_s_num_threads,0};
    PyObject* values[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_44LOS_Calc_PInOut_VesStruct(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_ray_orig, __Pyx_memviewslice __pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, __Pyx_memviewslice __pyx_v_ves_norm, __Pyx_memviewslice __pyx_v_lstruct_nlim, __Pyx_memviewslice __pyx_v_ves_lims, __Pyx_memviewslice __pyx_v_lstruct_polyx, __Pyx_memviewslice __pyx_v_lstruct_polyy, PyObject *__pyx_v_lstruct_lims, __Pyx_memviewslice __pyx_v_lstruct_normx, __Pyx_memviewslice __pyx_v_lstruct_normy, __Pyx_memviewslice __pyx_v_lnvert, int __pyx_v_nstruct_tot, int __pyx_v_nstruct_lim, double __pyx_v_rmin, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, int __pyx_v_forbid, int __pyx_v_test, int __pyx_v_num_threads) {
  int __pyx_v_npts_poly;
  int __pyx_v_num_los;
  int __pyx_v_ind_struct;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_len_lim;
  int __pyx_v_ind_min;
  int __pyx_v_nvert;
  double __pyx_v_Crit2_base;
  double __pyx_v_lim_min;
  double __pyx_v_lim_max;
  double __pyx_v_rmin2;
  PyObject *__pyx_v_error_message = 0;
  int __pyx_v_forbidbis;
  int __pyx_v_forbid0;
  int __pyx_v_bool1;
  int __pyx_v_bool2;
  double *__pyx_v_lbounds;
  double *__pyx_v_langles;
  arrayobject *__pyx_v_vperp_out = 0;
  arrayobject *__pyx_v_coeff_inter_in = 0;
  arrayobject *__pyx_v_coeff_inter_out = 0;
  arrayobject *__pyx_v_ind_inter_out = 0;
  int *__pyx_v_llimits;
  long *__pyx_v_lsz_lim;
  int __pyx_v_llim_ves[1];
  double __pyx_v_lbounds_ves[2];
  double __pyx_v_lim_ves[2];
  CYTHON_UNUSED int __pyx_v_are_limited;
  PyObject *__pyx_v_lslim = NULL;
  PyObject *__pyx_v_ee = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_Calc_PInOut_VesStruct", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
  __Pyx_XDECREF(__pyx_t_23);
  __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
  __Pyx_XDECREF(__pyx_t_79);
  __Pyx_XDECREF(__pyx_t_80);
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_Calc_PInOut_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_error_message);
  __Pyx_XDECREF((PyObject *)__pyx_v_vperp_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_coeff_inter_in);
  __Pyx_XDECREF((PyObject *)__pyx_v_coeff_inter_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind_inter_out);
  __Pyx_XDECREF(__pyx_v_lslim);
  __Pyx_XDECREF(__pyx_v_ee);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_orig, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_vdir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_poly, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_norm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lstruct_nlim, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_lims, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lstruct_polyx, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lstruct_polyy, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lstruct_normx, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lstruct_normy, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lnvert, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__202 = PyTuple_Pack(56, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_ves_norm, __pyx_n_s_lstruct_nlim, __pyx_n_s_ves_lims, __pyx_n_s_lstruct_polyx, __pyx_n_s_lstruct_polyy, __pyx_n_s_lstruct_lims, __pyx_n_s_lstruct_normx, __pyx_n_s_lstruct_normy, __pyx_n_s_lnvert, __pyx_n_s_nstruct_tot, __pyx_n_s_nstruct_lim, __pyx_n_s_rmin, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_forbid, __pyx_n_s_test, __pyx_n_s_num_threads, __pyx_n_s_npts_poly, __pyx_n_s_num_los, __pyx_n_s_ind_struct, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_kk, __pyx_n_s_len_lim, __pyx_n_s_ind_min, __pyx_n_s_nvert, __pyx_n_s_Crit2_base, __pyx_n_s_lim_min, __pyx_n_s_lim_max, __pyx_n_s_rmin2, __pyx_n_s_error_message, __pyx_n_s_forbidbis, __pyx_n_s_forbid0, __pyx_n_s_bool1, __pyx_n_s_bool2, __pyx_n_s_lbounds, __pyx_n_s_langles, __pyx_n_s_vperp_out, __pyx_n_s_coeff_inter_in, __pyx_n_s_coeff_inter_out, __pyx_n_s_ind_inter_out, __pyx_n_s_llimits, __pyx_n_s_lsz_lim, __pyx_n_s_llim_ves, __pyx_n_s_lbounds_ves, __pyx_n_s_lim_ves, __pyx_n_s_are_limited, __pyx_n_s_lslim, __pyx_n_s_ee); if (unlikely(!__pyx_tuple__202)) __PYX_ERR(0, 1810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__202);
  __Pyx_GIVEREF(__pyx_tuple__202);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_45LOS_Calc_PInOut_VesStruct, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1810, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_Calc_PInOut_VesStruct, __pyx_t_1) < 0) __PYX_ERR(0, 1810, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__203 = (PyObject*)__Pyx_PyCode_New(24, 0, 56, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__202, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_Calc_PInOut_VesStruct, 1810, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__203)) __PYX_ERR(0, 1810, __pyx_L1_error)
 1811:                               double[:, ::1] ray_vdir,
 1812:                               double[:, ::1] ves_poly,
 1813:                               double[:, ::1] ves_norm,
+1814:                               long[::1] lstruct_nlim=None,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 1814, __pyx_L1_error)
  __pyx_k__58 = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
+1815:                               double[::1] ves_lims=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1815, __pyx_L1_error)
  __pyx_k__59 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1816:                               double[::1] lstruct_polyx=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1816, __pyx_L1_error)
  __pyx_k__60 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1817:                               double[::1] lstruct_polyy=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1817, __pyx_L1_error)
  __pyx_k__61 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1818:                               list lstruct_lims=None,
    values[8] = ((PyObject*)Py_None);
    values[20] = ((PyObject*)__pyx_n_s_Tor);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23);
        CYTHON_FALLTHROUGH;
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_PInOut_VesStruct", 0, 4, 24, 1); __PYX_ERR(0, 1810, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_PInOut_VesStruct", 0, 4, 24, 2); __PYX_ERR(0, 1810, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_norm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_PInOut_VesStruct", 0, 4, 24, 3); __PYX_ERR(0, 1810, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_nlim);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_lims);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_polyx);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_polyy);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_lims);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_normx);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lstruct_normy);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lnvert);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nstruct_tot);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nstruct_lim);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rmin);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[19] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 20:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[20] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 21:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_forbid);
          if (value) { values[21] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 22:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_test);
          if (value) { values[22] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 23:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[23] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_Calc_PInOut_VesStruct") < 0)) __PYX_ERR(0, 1810, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 24: values[23] = PyTuple_GET_ITEM(__pyx_args, 23);
        CYTHON_FALLTHROUGH;
        case 23: values[22] = PyTuple_GET_ITEM(__pyx_args, 22);
        CYTHON_FALLTHROUGH;
        case 22: values[21] = PyTuple_GET_ITEM(__pyx_args, 21);
        CYTHON_FALLTHROUGH;
        case 21: values[20] = PyTuple_GET_ITEM(__pyx_args, 20);
        CYTHON_FALLTHROUGH;
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ray_orig = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_orig.memview)) __PYX_ERR(0, 1810, __pyx_L3_error)
    __pyx_v_ray_vdir = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_vdir.memview)) __PYX_ERR(0, 1811, __pyx_L3_error)
    __pyx_v_ves_poly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_poly.memview)) __PYX_ERR(0, 1812, __pyx_L3_error)
    __pyx_v_ves_norm = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_norm.memview)) __PYX_ERR(0, 1813, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_lstruct_nlim = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lstruct_nlim.memview)) __PYX_ERR(0, 1814, __pyx_L3_error)
    } else {
      __pyx_v_lstruct_nlim = __pyx_k__58;
      __PYX_INC_MEMVIEW(&__pyx_v_lstruct_nlim, 1);
    }
    if (values[5]) {
      __pyx_v_ves_lims = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_lims.memview)) __PYX_ERR(0, 1815, __pyx_L3_error)
    } else {
      __pyx_v_ves_lims = __pyx_k__59;
      __PYX_INC_MEMVIEW(&__pyx_v_ves_lims, 1);
    }
    if (values[6]) {
      __pyx_v_lstruct_polyx = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lstruct_polyx.memview)) __PYX_ERR(0, 1816, __pyx_L3_error)
    } else {
      __pyx_v_lstruct_polyx = __pyx_k__60;
      __PYX_INC_MEMVIEW(&__pyx_v_lstruct_polyx, 1);
    }
    if (values[7]) {
      __pyx_v_lstruct_polyy = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lstruct_polyy.memview)) __PYX_ERR(0, 1817, __pyx_L3_error)
    } else {
      __pyx_v_lstruct_polyy = __pyx_k__61;
      __PYX_INC_MEMVIEW(&__pyx_v_lstruct_polyy, 1);
    }
    __pyx_v_lstruct_lims = ((PyObject*)values[8]);
    if (values[9]) {
      __pyx_v_lstruct_normx = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[9], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lstruct_normx.memview)) __PYX_ERR(0, 1819, __pyx_L3_error)
    } else {
      __pyx_v_lstruct_normx = __pyx_k__62;
      __PYX_INC_MEMVIEW(&__pyx_v_lstruct_normx, 1);
    }
    if (values[10]) {
      __pyx_v_lstruct_normy = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[10], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lstruct_normy.memview)) __PYX_ERR(0, 1820, __pyx_L3_error)
    } else {
      __pyx_v_lstruct_normy = __pyx_k__63;
      __PYX_INC_MEMVIEW(&__pyx_v_lstruct_normy, 1);
    }
    if (values[11]) {
      __pyx_v_lnvert = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[11], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lnvert.memview)) __PYX_ERR(0, 1821, __pyx_L3_error)
    } else {
      __pyx_v_lnvert = __pyx_k__64;
      __PYX_INC_MEMVIEW(&__pyx_v_lnvert, 1);
    }
    if (values[12]) {
      __pyx_v_nstruct_tot = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_nstruct_tot == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1822, __pyx_L3_error)
    } else {
      __pyx_v_nstruct_tot = ((int)0);
    }
    if (values[13]) {
      __pyx_v_nstruct_lim = __Pyx_PyInt_As_int(values[13]); if (unlikely((__pyx_v_nstruct_lim == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1823, __pyx_L3_error)
    } else {
      __pyx_v_nstruct_lim = ((int)0);
    }
    if (values[14]) {
      __pyx_v_rmin = __pyx_PyFloat_AsDouble(values[14]); if (unlikely((__pyx_v_rmin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1824, __pyx_L3_error)
    } else {
      __pyx_v_rmin = ((double)-1.0);
    }
    if (values[15]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[15]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1825, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__65;
    }
    if (values[16]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[16]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1825, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__66;
    }
    if (values[17]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[17]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1826, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__67;
    }
    if (values[18]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[18]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1826, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__68;
    }
    if (values[19]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[19]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1827, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__69;
    }
    __pyx_v_ves_type = ((PyObject*)values[20]);
    if (values[21]) {
      __pyx_v_forbid = __Pyx_PyObject_IsTrue(values[21]); if (unlikely((__pyx_v_forbid == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1828, __pyx_L3_error)
    } else {
      __pyx_v_forbid = ((int)1);
    }
    if (values[22]) {
      __pyx_v_test = __Pyx_PyObject_IsTrue(values[22]); if (unlikely((__pyx_v_test == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1828, __pyx_L3_error)
    } else {
      __pyx_v_test = ((int)1);
    }
    if (values[23]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[23]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1828, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_Calc_PInOut_VesStruct", 0, 4, 24, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1810, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_Calc_PInOut_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lstruct_lims), (&PyList_Type), 1, "lstruct_lims", 1))) __PYX_ERR(0, 1818, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 1827, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_44LOS_Calc_PInOut_VesStruct(__pyx_self, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_ves_norm, __pyx_v_lstruct_nlim, __pyx_v_ves_lims, __pyx_v_lstruct_polyx, __pyx_v_lstruct_polyy, __pyx_v_lstruct_lims, __pyx_v_lstruct_normx, __pyx_v_lstruct_normy, __pyx_v_lnvert, __pyx_v_nstruct_tot, __pyx_v_nstruct_lim, __pyx_v_rmin, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_forbid, __pyx_v_test, __pyx_v_num_threads);
+1819:                               double[::1] lstruct_normx=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1819, __pyx_L1_error)
  __pyx_k__62 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1820:                               double[::1] lstruct_normy=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 1820, __pyx_L1_error)
  __pyx_k__63 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+1821:                               long[::1] lnvert=None,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 1821, __pyx_L1_error)
  __pyx_k__64 = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 1822:                               int nstruct_tot=0,
 1823:                               int nstruct_lim=0,
 1824:                               double rmin=-1,
+1825:                               double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__65 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__66 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+1826:                               double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__67 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__68 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+1827:                               double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__69 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 1828:                               bint forbid=1, bint test=1, int num_threads=16):
 1829:     """
 1830:     Computes the entry and exit point of all provided LOS for the provided
 1831:     vessel polygon (toroidal or linear) with its associated structures.
 1832:     Return the normal vector at impact and the index of the impact segment
 1833: 
 1834:     Params
 1835:     ======
 1836:     ray_orig : (3, num_los) double array
 1837:        LOS origin points coordinates
 1838:     ray_vdir : (3, num_los) double array
 1839:        LOS normalized direction vector
 1840:     ves_poly : (2, num_vertex) double array
 1841:        Coordinates of the vertices of the Polygon defining the 2D poloidal
 1842:        cut of the Vessel
 1843:     ves_norm : (2, num_vertex-1) double array
 1844:        Normal vectors going "inwards" of the edges of the Polygon defined
 1845:        by ves_poly
 1846:     nstruct : int
 1847:        Total number of structures (counting each limited structure as one)
 1848:     ves_lims : array
 1849:        Contains the limits min and max of vessel
 1850:     lstruct_poly : list
 1851:        List of coordinates of the vertices of all structures on poloidal plane
 1852:     lstruct_lims : list
 1853:        List of limits of all structures
 1854:     lstruct_nlim : array of ints
 1855:        List of number of limits for all structures
 1856:     lstruct_norm : list
 1857:        List of coordinates of "inwards" normal vectors of the polygon of all
 1858:        the structures
 1859:     rmin : double
 1860:        Minimal radius of vessel to take into consideration
 1861:     eps_<val> : double
 1862:        Small value, acceptance of error
 1863:     vtype : string
 1864:        Type of vessel ("Tor" or "Lin")
 1865:     forbid : bool
 1866:        Should we forbid values behind vissible radius ? (see rmin)
 1867:     test : bool
 1868:        Should we run tests ?
 1869:     num_threads : int
 1870:        The num_threads argument indicates how many threads the team should
 1871:        consist of. If not given, OpenMP will decide how many threads to use.
 1872:        Typically this is the number of cores available on the machine.
 1873:     Returns
 1874:     ======
 1875:     coeff_inter_in : (num_los) array
 1876:        scalars level of "in" intersection of the LOS (if k=0 at origin)
 1877:     coeff_inter_out : (num_los) array
 1878:        scalars level of "out" intersection of the LOS (if k=0 at origin)
 1879:     vperp_out : (3, num_los) array
 1880:        Coordinates of the normal vector of impact of the LOS (NaN if none)
 1881:     ind_inter_out : (3, num_los)
 1882:        Index of structure impacted by LOS: ind_inter_out[:,ind_los]=(i,j,k)
 1883:        where k is the index of edge impacted on the j-th sub structure of the
 1884:        structure number i. If the LOS impacted the vessel i=j=0
 1885:     """
+1886:     cdef int npts_poly = ves_norm.shape[1]
  __pyx_v_npts_poly = (__pyx_v_ves_norm.shape[1]);
+1887:     cdef int num_los = ray_orig.shape[1]
  __pyx_v_num_los = (__pyx_v_ray_orig.shape[1]);
+1888:     cdef int ind_struct = 0
  __pyx_v_ind_struct = 0;
 1889:     cdef int ii, jj, kk
 1890:     cdef int len_lim
 1891:     cdef int ind_min
 1892:     cdef int nvert
+1893:     cdef double Crit2_base = eps_uz * eps_uz /400.
  __pyx_v_Crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
+1894:     cdef double lim_min = 0.
  __pyx_v_lim_min = 0.;
+1895:     cdef double lim_max = 0.
  __pyx_v_lim_max = 0.;
+1896:     cdef double rmin2 = 0.
  __pyx_v_rmin2 = 0.;
 1897:     cdef str error_message
 1898:     cdef bint forbidbis, forbid0
 1899:     cdef bint bool1, bool2
+1900:     cdef double *lbounds = <double *>malloc(nstruct_tot * 6 * sizeof(double))
  __pyx_v_lbounds = ((double *)malloc(((__pyx_v_nstruct_tot * 6) * (sizeof(double)))));
+1901:     cdef double *langles = <double *>malloc(nstruct_tot * 2 * sizeof(double))
  __pyx_v_langles = ((double *)malloc(((__pyx_v_nstruct_tot * 2) * (sizeof(double)))));
+1902:     cdef array vperp_out = clone(array('d'), num_los * 3, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), (__pyx_v_num_los * 3), 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_vperp_out = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
/* … */
  __pyx_tuple__70 = PyTuple_Pack(1, __pyx_n_s_d); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(0, 1902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__70);
  __Pyx_GIVEREF(__pyx_tuple__70);
+1903:     cdef array coeff_inter_in  = clone(array('d'), num_los, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), __pyx_v_num_los, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_coeff_inter_in = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
+1904:     cdef array coeff_inter_out = clone(array('d'), num_los, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), __pyx_v_num_los, 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_coeff_inter_out = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+1905:     cdef array ind_inter_out = clone(array('i'), num_los * 3, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_num_los * 3), 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ind_inter_out = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
/* … */
  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_n_s_i); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 1905, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__71);
  __Pyx_GIVEREF(__pyx_tuple__71);
+1906:     cdef int *llimits = NULL
  __pyx_v_llimits = NULL;
+1907:     cdef long *lsz_lim = NULL
  __pyx_v_lsz_lim = NULL;
 1908:     cdef int[1] llim_ves
 1909:     cdef double[2] lbounds_ves
 1910:     cdef double[2] lim_ves
 1911: 
 1912:     # == Testing inputs ========================================================
+1913:     if test:
  __pyx_t_3 = (__pyx_v_test != 0);
  if (__pyx_t_3) {
/* … */
  }
 1914:         error_message = "ray_orig and ray_vdir must have the same shape: "\
+1915:                         + "(3,) or (3,NL)!"
    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_ray_orig_and_ray_vdir_must_have, __pyx_kp_s_3_or_3_NL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_error_message = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+1916:         assert tuple(ray_orig.shape) == tuple(ray_vdir.shape) and \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_ray_orig.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_ray_vdir.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 1916, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }
+1917:           ray_orig.shape[0] == 3, error_message
      __pyx_t_5 = (((__pyx_v_ray_orig.shape[0]) == 3) != 0);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 1916, __pyx_L1_error)
      }
    }
    #endif
+1918:         error_message = "ves_poly and ves_norm must have the same shape (2,NS)!"
    __Pyx_INCREF(__pyx_kp_s_ves_poly_and_ves_norm_must_have);
    __Pyx_DECREF_SET(__pyx_v_error_message, __pyx_kp_s_ves_poly_and_ves_norm_must_have);
+1919:         assert ves_poly.shape[0] == 2 and ves_norm.shape[0] == 2 and \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = (((__pyx_v_ves_poly.shape[0]) == 2) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_5 = (((__pyx_v_ves_norm.shape[0]) == 2) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L6_bool_binop_done;
      }
+1920:             npts_poly == ves_poly.shape[1]-1, error_message
      __pyx_t_5 = ((__pyx_v_npts_poly == ((__pyx_v_ves_poly.shape[1]) - 1)) != 0);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L6_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 1919, __pyx_L1_error)
      }
    }
    #endif
+1921:         bool1 = lstruct_lims is None or len(lstruct_normy) == len(lstruct_normy)
    __pyx_t_5 = (__pyx_v_lstruct_lims == ((PyObject*)Py_None));
    __pyx_t_6 = (__pyx_t_5 != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normy); 
    __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normy); 
    __pyx_t_6 = ((__pyx_t_7 == __pyx_t_8) != 0);
    __pyx_t_3 = __pyx_t_6;
    __pyx_L9_bool_binop_done:;
    __pyx_v_bool1 = __pyx_t_3;
+1922:         bool2 = lstruct_normx is None or len(lstruct_polyx) == len(lstruct_polyy)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_normx.memview) == Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyx); 
    __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyy); 
    __pyx_t_6 = ((__pyx_t_8 == __pyx_t_7) != 0);
    __pyx_t_3 = __pyx_t_6;
    __pyx_L11_bool_binop_done:;
    __pyx_v_bool2 = __pyx_t_3;
 1923:         error_message = "lstruct_poly, lstruct_lims, lstruct_norm must be None"\
+1924:                         + " or lists of same len!"
    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_lstruct_poly_lstruct_lims_lstruc, __pyx_kp_s_or_lists_of_same_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1924, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_error_message, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+1925:         assert bool1 and bool2, error_message
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_6 = (__pyx_v_bool1 != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_3 = __pyx_t_6;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_6 = (__pyx_v_bool2 != 0);
      __pyx_t_3 = __pyx_t_6;
      __pyx_L13_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 1925, __pyx_L1_error)
      }
    }
    #endif
+1926:         error_message = "[eps_uz,eps_vz,eps_a,eps_b] must be floats < 1.e-4!"
    __Pyx_INCREF(__pyx_kp_s_eps_uz_eps_vz_eps_a_eps_b_must);
    __Pyx_DECREF_SET(__pyx_v_error_message, __pyx_kp_s_eps_uz_eps_vz_eps_a_eps_b_must);
+1927:         assert all([ee < 1.e-4 for ee in [eps_uz, eps_a,
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_eps_uz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_eps_a); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
      __pyx_t_12 = PyTuple_New(5); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_12, 3, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_12, 4, __pyx_t_11);
      __pyx_t_4 = 0;
      __pyx_t_2 = 0;
      __pyx_t_9 = 0;
      __pyx_t_10 = 0;
      __pyx_t_11 = 0;
      __pyx_t_11 = __pyx_t_12; __Pyx_INCREF(__pyx_t_11); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      for (;;) {
        if (__pyx_t_13 >= 5) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_11, __pyx_t_13); __Pyx_INCREF(__pyx_t_12); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 1927, __pyx_L1_error)
        #else
        __pyx_t_12 = PySequence_ITEM(__pyx_t_11, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1927, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_ee, __pyx_t_12);
        __pyx_t_12 = 0;
        __pyx_t_12 = PyObject_RichCompare(__pyx_v_ee, __pyx_float_1_eneg_4, Py_LT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1927, __pyx_L1_error)
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 1927, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1927, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_3)) {
+1928:                                           eps_vz, eps_b,
      __pyx_t_9 = PyFloat_FromDouble(__pyx_v_eps_vz); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyFloat_FromDouble(__pyx_v_eps_b); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
+1929:                                           eps_plane]]), error_message
      __pyx_t_11 = PyFloat_FromDouble(__pyx_v_eps_plane); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
/* … */
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 1927, __pyx_L1_error)
      }
    }
    #endif
+1930:         error_message = "ves_type must be a str in ['Tor','Lin']!"
    __Pyx_INCREF(__pyx_kp_s_ves_type_must_be_a_str_in_Tor_Li);
    __Pyx_DECREF_SET(__pyx_v_error_message, __pyx_kp_s_ves_type_must_be_a_str_in_Tor_Li);
+1931:         assert ves_type.lower() in ['tor', 'lin'], error_message
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_11 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1931, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_11, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1931, __pyx_L1_error)
      if (!__pyx_t_6) {
      } else {
        __pyx_t_3 = __pyx_t_6;
        goto __pyx_L17_bool_binop_done;
      }
      __pyx_t_6 = (__Pyx_PyString_Equals(__pyx_t_11, __pyx_n_s_lin, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1931, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_6;
      __pyx_L17_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 1931, __pyx_L1_error)
      }
    }
    #endif
 1932:         error_message = "If you define structures you must define all the "\
+1933:                         + "structural variables: \n"\
    __pyx_t_11 = PyNumber_Add(__pyx_kp_s_If_you_define_structures_you_mus, __pyx_kp_s_structural_variables); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1933, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
+1934:                         + "    - lstruct_polyx, lstruct_polyy, lstruct_lims,\n"\
    __pyx_t_1 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_lstruct_polyx_lstruct_polyy_lst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1935:                         + "    - lstruct_nlim, nstruct_tot, nstruct_lim,\n"\
    __pyx_t_11 = PyNumber_Add(__pyx_t_1, __pyx_kp_s_lstruct_nlim_nstruct_tot_nstruc); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1936:                         + "    - lnvert, lstruct_normx, lstruct_normy\n"
    __pyx_t_1 = PyNumber_Add(__pyx_t_11, __pyx_kp_s_lnvert_lstruct_normx_lstruct_no); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF_SET(__pyx_v_error_message, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;
+1937:         bool1 = ((lstruct_polyx is not None)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_polyx.memview) != Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L19_bool_binop_done;
    }
+1938:                  or (lstruct_polyy is not None)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_polyy.memview) != Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L19_bool_binop_done;
    }
+1939:                  or (lstruct_normx is not None)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_normx.memview) != Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L19_bool_binop_done;
    }
+1940:                  or (lstruct_normy is not None)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_normy.memview) != Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L19_bool_binop_done;
    }
+1941:                  or (lstruct_nlim is not None)
    __pyx_t_6 = ((((PyObject *) __pyx_v_lstruct_nlim.memview) != Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L19_bool_binop_done;
    }
+1942:                  or (lstruct_lims is not None)
    __pyx_t_6 = (__pyx_v_lstruct_lims != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_6 != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L19_bool_binop_done;
    }
+1943:                  or (lnvert is not None)
    __pyx_t_5 = ((((PyObject *) __pyx_v_lnvert.memview) != Py_None) != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L19_bool_binop_done;
    }
+1944:                  or (nstruct_tot > 0) or (nstruct_lim > 0))
    __pyx_t_5 = ((__pyx_v_nstruct_tot > 0) != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L19_bool_binop_done;
    }
    __pyx_t_5 = ((__pyx_v_nstruct_lim > 0) != 0);
    __pyx_t_3 = __pyx_t_5;
    __pyx_L19_bool_binop_done:;
    __pyx_v_bool1 = __pyx_t_3;
+1945:         if bool1:
    __pyx_t_3 = (__pyx_v_bool1 != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L28;
    }
+1946:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        goto __pyx_L34_try_end;
        __pyx_L29_error:;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
        goto __pyx_L1_error;
        __pyx_L30_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
        __pyx_L34_try_end:;
      }
+1947:                 bool1 = ((len(lstruct_polyx) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyx); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1948:                          or (len(lstruct_polyy) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyy); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1949:                          or (len(lstruct_normx) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normx); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1950:                          or (len(lstruct_normy) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normy); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1951:                          or (len(lstruct_nlim) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_nlim); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1952:                          or (len(lstruct_lims) > 0)
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 1952, __pyx_L29_error)
          }
          __pyx_t_13 = PyList_GET_SIZE(__pyx_v_lstruct_lims); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1952, __pyx_L29_error)
          __pyx_t_5 = ((__pyx_t_13 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1953:                          or (len(lnvert) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lnvert); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1954:                          or (nstruct_tot > 0)
          __pyx_t_5 = ((__pyx_v_nstruct_tot > 0) != 0);
          if (!__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L35_bool_binop_done;
          }
+1955:                          or (nstruct_lim > 0))
          __pyx_t_5 = ((__pyx_v_nstruct_lim > 0) != 0);
          __pyx_t_3 = __pyx_t_5;
          __pyx_L35_bool_binop_done:;
          __pyx_v_bool1 = __pyx_t_3;
+1956:                 bool2 = ((len(lstruct_polyx) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyx); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1957:                          and (len(lstruct_polyy) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_polyy); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1958:                          and (len(lstruct_normx) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normx); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1959:                          and (len(lstruct_normy) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_normy); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1960:                          and (len(lstruct_nlim) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lstruct_nlim); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1961:                          and (len(lstruct_lims) > 0)
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 1961, __pyx_L29_error)
          }
          __pyx_t_13 = PyList_GET_SIZE(__pyx_v_lstruct_lims); if (unlikely(__pyx_t_13 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1961, __pyx_L29_error)
          __pyx_t_5 = ((__pyx_t_13 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1962:                          and (len(lnvert) > 0)
          __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_lnvert); 
          __pyx_t_5 = ((__pyx_t_7 > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1963:                          and (nstruct_tot > 0)
          __pyx_t_5 = ((__pyx_v_nstruct_tot > 0) != 0);
          if (__pyx_t_5) {
          } else {
            __pyx_t_3 = __pyx_t_5;
            goto __pyx_L44_bool_binop_done;
          }
+1964:                          and (nstruct_lim > 0))
          __pyx_t_5 = ((__pyx_v_nstruct_lim > 0) != 0);
          __pyx_t_3 = __pyx_t_5;
          __pyx_L44_bool_binop_done:;
          __pyx_v_bool2 = __pyx_t_3;
+1965:                 assert (not bool1 or bool2), error_message
          #ifndef CYTHON_WITHOUT_ASSERTIONS
          if (unlikely(!Py_OptimizeFlag)) {
            __pyx_t_5 = ((!(__pyx_v_bool1 != 0)) != 0);
            if (!__pyx_t_5) {
            } else {
              __pyx_t_3 = __pyx_t_5;
              goto __pyx_L53_bool_binop_done;
            }
            __pyx_t_5 = (__pyx_v_bool2 != 0);
            __pyx_t_3 = __pyx_t_5;
            __pyx_L53_bool_binop_done:;
            if (unlikely(!__pyx_t_3)) {
              PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
              __PYX_ERR(0, 1965, __pyx_L29_error)
            }
          }
          #endif
+1966:             except Exception:
        __pyx_t_17 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
        if (__pyx_t_17) {
          __Pyx_AddTraceback("tofu.geom._GG03.LOS_Calc_PInOut_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 1966, __pyx_L31_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GOTREF(__pyx_t_12);
+1967:                 assert False, error_message
          #ifndef CYTHON_WITHOUT_ASSERTIONS
          if (unlikely(!Py_OptimizeFlag)) {
            if (unlikely(!0)) {
              PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
              __PYX_ERR(0, 1967, __pyx_L31_except_error)
            }
          }
          #endif
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L30_exception_handled;
        }
        goto __pyx_L31_except_error;
        __pyx_L31_except_error:;
 1968:         else:
+1969:             bool2 = ((lstruct_polyx is not None)
    /*else*/ {
/* … */
      __pyx_t_5 = ((((PyObject *) __pyx_v_lstruct_polyx.memview) != Py_None) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L57_bool_binop_done;
      }
+1970:                  and (lstruct_polyy is not None)
      __pyx_t_5 = ((((PyObject *) __pyx_v_lstruct_polyy.memview) != Py_None) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L57_bool_binop_done;
      }
+1971:                  and (lstruct_normx is not None)
      __pyx_t_5 = ((((PyObject *) __pyx_v_lstruct_normx.memview) != Py_None) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L57_bool_binop_done;
      }
+1972:                  and (lstruct_normy is not None)
      __pyx_t_5 = ((((PyObject *) __pyx_v_lstruct_normy.memview) != Py_None) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L57_bool_binop_done;
      }
+1973:                  and (lstruct_nlim is not None)
      __pyx_t_5 = ((((PyObject *) __pyx_v_lstruct_nlim.memview) != Py_None) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L57_bool_binop_done;
      }
+1974:                  and (lstruct_lims is not None)
      __pyx_t_5 = (__pyx_v_lstruct_lims != ((PyObject*)Py_None));
/* … */
      __pyx_t_6 = (__pyx_t_5 != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_3 = __pyx_t_6;
        goto __pyx_L57_bool_binop_done;
      }
+1975:                  and (lnvert is not None)
      __pyx_t_6 = ((((PyObject *) __pyx_v_lnvert.memview) != Py_None) != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_3 = __pyx_t_6;
        goto __pyx_L57_bool_binop_done;
      }
+1976:                  and (nstruct_tot > 0) and (nstruct_lim > 0))
      __pyx_t_6 = ((__pyx_v_nstruct_tot > 0) != 0);
      if (__pyx_t_6) {
      } else {
        __pyx_t_3 = __pyx_t_6;
        goto __pyx_L57_bool_binop_done;
      }
      __pyx_t_6 = ((__pyx_v_nstruct_lim > 0) != 0);
      __pyx_t_3 = __pyx_t_6;
      __pyx_L57_bool_binop_done:;
      __pyx_v_bool2 = __pyx_t_3;
+1977:             assert (not bool1 or bool2), error_message
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        __pyx_t_6 = ((!(__pyx_v_bool1 != 0)) != 0);
        if (!__pyx_t_6) {
        } else {
          __pyx_t_3 = __pyx_t_6;
          goto __pyx_L66_bool_binop_done;
        }
        __pyx_t_6 = (__pyx_v_bool2 != 0);
        __pyx_t_3 = __pyx_t_6;
        __pyx_L66_bool_binop_done:;
        if (unlikely(!__pyx_t_3)) {
          PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
          __PYX_ERR(0, 1977, __pyx_L1_error)
        }
      }
      #endif
    }
    __pyx_L28:;
 1978: 
 1979:     # ==========================================================================
+1980:     if ves_type.lower() == 'tor':
  __pyx_t_12 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_12, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L68;
  }
 1981:         # .. if there are, we get the limits for the vessel ....................
+1982:         if ves_lims is None or np.size(ves_lims) == 0:
    __pyx_t_6 = ((((PyObject *) __pyx_v_ves_lims.memview) == Py_None) != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_3 = __pyx_t_6;
      goto __pyx_L70_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __pyx_memoryview_fromslice(__pyx_v_ves_lims, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_10 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_10)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_10);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_12 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_12, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 1982, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __pyx_t_6;
    __pyx_L70_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L69;
    }
+1983:             are_limited = False
      __pyx_v_are_limited = 0;
+1984:             lbounds_ves[0] = 0
      (__pyx_v_lbounds_ves[0]) = 0.0;
+1985:             lbounds_ves[1] = 0
      (__pyx_v_lbounds_ves[1]) = 0.0;
+1986:             llim_ves[0] = 1
      (__pyx_v_llim_ves[0]) = 1;
 1987:         else:
+1988:             are_limited = True
    /*else*/ {
      __pyx_v_are_limited = 1;
+1989:             lbounds_ves[0] = Catan2(Csin(ves_lims[0]), Ccos(ves_lims[0]))
      __pyx_t_18 = 0;
      __pyx_t_19 = 0;
      (__pyx_v_lbounds_ves[0]) = atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_18)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_19)) )))));
+1990:             lbounds_ves[1] = Catan2(Csin(ves_lims[1]), Ccos(ves_lims[1]))
      __pyx_t_20 = 1;
      __pyx_t_21 = 1;
      (__pyx_v_lbounds_ves[1]) = atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_20)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_21)) )))));
+1991:             llim_ves[0] = 0
      (__pyx_v_llim_ves[0]) = 0;
    }
    __pyx_L69:;
 1992:         # -- Toroidal case -----------------------------------------------------
 1993:         # rmin is necessary to avoid looking on the other side of the tokamak
+1994:         if rmin < 0.:
    __pyx_t_3 = ((__pyx_v_rmin < 0.) != 0);
    if (__pyx_t_3) {
/* … */
    }
+1995:             rmin = 0.95*min(np.min(ves_poly[0, ...]),
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_min); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_22.data = __pyx_v_ves_poly.data;
      __pyx_t_22.memview = __pyx_v_ves_poly.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_22, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[0];
        if ((0)) __PYX_ERR(0, 1995, __pyx_L1_error)
        __pyx_t_22.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_22.shape[0] = __pyx_v_ves_poly.shape[1];
__pyx_t_22.strides[0] = __pyx_v_ves_poly.strides[1];
    __pyx_t_22.suboffsets[0] = -1;

__pyx_t_12 = __pyx_memoryview_fromslice(__pyx_t_22, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
      __pyx_t_22.memview = NULL;
      __pyx_t_22.data = NULL;
      __pyx_t_23 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_23 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_23)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_23);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_11 = (__pyx_t_23) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_23, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
/* … */
      __pyx_t_1 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1995, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_rmin = __pyx_t_24;
+1996:                                 np.min(np.hypot(ray_orig[0, ...],
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_min); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_hypot); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_22.data = __pyx_v_ray_orig.data;
      __pyx_t_22.memview = __pyx_v_ray_orig.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_22, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ray_orig.strides[0];
        if ((0)) __PYX_ERR(0, 1996, __pyx_L1_error)
        __pyx_t_22.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_22.shape[0] = __pyx_v_ray_orig.shape[1];
__pyx_t_22.strides[0] = __pyx_v_ray_orig.strides[1];
    __pyx_t_22.suboffsets[0] = -1;

__pyx_t_10 = __pyx_memoryview_fromslice(__pyx_t_22, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
      __pyx_t_22.memview = NULL;
      __pyx_t_22.data = NULL;
/* … */
      __pyx_t_12 = PyObject_RichCompare(__pyx_t_1, __pyx_t_11, Py_LT); __Pyx_XGOTREF(__pyx_t_12); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (__pyx_t_3) {
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_9 = __pyx_t_1;
      } else {
        __Pyx_INCREF(__pyx_t_11);
        __pyx_t_9 = __pyx_t_11;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1997:                                                 ray_orig[1, ...])))
      __pyx_t_22.data = __pyx_v_ray_orig.data;
      __pyx_t_22.memview = __pyx_v_ray_orig.memview;
      __PYX_INC_MEMVIEW(&__pyx_t_22, 0);
      {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ray_orig.strides[0];
        if ((0)) __PYX_ERR(0, 1997, __pyx_L1_error)
        __pyx_t_22.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_22.shape[0] = __pyx_v_ray_orig.shape[1];
__pyx_t_22.strides[0] = __pyx_v_ray_orig.strides[1];
    __pyx_t_22.suboffsets[0] = -1;

__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_22, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1997, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
      __pyx_t_22.memview = NULL;
      __pyx_t_22.data = NULL;
      __pyx_t_4 = NULL;
      __pyx_t_17 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_4)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
          __pyx_t_17 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_10, __pyx_t_2};
        __pyx_t_12 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1996, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
        PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_10, __pyx_t_2};
        __pyx_t_12 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1996, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      } else
      #endif
      {
        __pyx_t_23 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 1996, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        if (__pyx_t_4) {
          __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_23, 0, __pyx_t_4); __pyx_t_4 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_23, 0+__pyx_t_17, __pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_23, 1+__pyx_t_17, __pyx_t_2);
        __pyx_t_10 = 0;
        __pyx_t_2 = 0;
        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_23, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1996, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_9)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_9, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_12);
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1996, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+1998:         rmin2 = rmin*rmin
    __pyx_v_rmin2 = (__pyx_v_rmin * __pyx_v_rmin);
 1999:         # Variable to avoid looking "behind" blind spot of tore
+2000:         if forbid:
    __pyx_t_3 = (__pyx_v_forbid != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L73;
    }
+2001:             forbid0, forbidbis = 1, 1
      __pyx_t_3 = 1;
      __pyx_t_6 = 1;
      __pyx_v_forbid0 = __pyx_t_3;
      __pyx_v_forbidbis = __pyx_t_6;
 2002:         else:
+2003:             forbid0, forbidbis = 0, 0
    /*else*/ {
      __pyx_t_6 = 0;
      __pyx_t_3 = 0;
      __pyx_v_forbid0 = __pyx_t_6;
      __pyx_v_forbidbis = __pyx_t_3;
    }
    __pyx_L73:;
 2004: 
 2005:         # -- Computing intersection between LOS and Vessel ---------------------
+2006:         raytracing_inout_struct_tor(num_los, ray_vdir, ray_orig,
    __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_tor(__pyx_v_num_los, __pyx_v_ray_vdir, __pyx_v_ray_orig, __pyx_t_22, __pyx_t_25, __pyx_t_26, __pyx_v_lstruct_nlim, __pyx_t_27, __pyx_v_forbid0, __pyx_v_forbidbis, __pyx_v_rmin, __pyx_v_rmin2, __pyx_v_Crit2_base, __pyx_v_npts_poly, NULL, __pyx_v_lbounds_ves, __pyx_v_llim_ves, NULL, NULL, (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_28 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_29)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_30 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_31)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_32 * __pyx_v_ves_norm.strides[0]) )) + __pyx_t_33)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_34 * __pyx_v_ves_norm.strides[0]) )) + __pyx_t_35)) )))), __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_num_threads, 0);
    __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
    __pyx_t_22.memview = NULL;
    __pyx_t_22.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
    __pyx_t_25.memview = NULL;
    __pyx_t_25.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
    __pyx_t_26.memview = NULL;
    __pyx_t_26.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
    __pyx_t_27.memview = NULL;
    __pyx_t_27.data = NULL;
+2007:                                     coeff_inter_out, coeff_inter_in,
    __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 2007, __pyx_L1_error)
    __pyx_t_25 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_in), PyBUF_WRITABLE); if (unlikely(!__pyx_t_25.memview)) __PYX_ERR(0, 2007, __pyx_L1_error)
+2008:                                     vperp_out, lstruct_nlim, ind_inter_out,
    __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_vperp_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 2008, __pyx_L1_error)
    __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 2008, __pyx_L1_error)
 2009:                                     forbid0, forbidbis,
 2010:                                     rmin, rmin2, Crit2_base,
 2011:                                     npts_poly,  NULL, lbounds_ves,
 2012:                                     llim_ves, NULL, NULL,
+2013:                                     &ves_poly[0][0],
    __pyx_t_28 = 0;
    __pyx_t_29 = 0;
+2014:                                     &ves_poly[1][0],
    __pyx_t_30 = 1;
    __pyx_t_31 = 0;
+2015:                                     &ves_norm[0][0],
    __pyx_t_32 = 0;
    __pyx_t_33 = 0;
+2016:                                     &ves_norm[1][0],
    __pyx_t_34 = 1;
    __pyx_t_35 = 0;
 2017:                                     eps_uz, eps_vz, eps_a, eps_b, eps_plane,
 2018:                                     num_threads, False) # structure is in
 2019: 
 2020:         # -- Treating the structures (if any) ----------------------------------
+2021:         if nstruct_tot > 0:
    __pyx_t_3 = ((__pyx_v_nstruct_tot > 0) != 0);
    if (__pyx_t_3) {
/* … */
    }
+2022:             ind_struct = 0
      __pyx_v_ind_struct = 0;
+2023:             llimits = <int *>malloc(nstruct_tot * sizeof(int))
      __pyx_v_llimits = ((int *)malloc((__pyx_v_nstruct_tot * (sizeof(int)))));
+2024:             lsz_lim = <long *>malloc(nstruct_lim * sizeof(long))
      __pyx_v_lsz_lim = ((long *)malloc((__pyx_v_nstruct_lim * (sizeof(long)))));
+2025:             for ii in range(nstruct_lim):
      __pyx_t_17 = __pyx_v_nstruct_lim;
      __pyx_t_36 = __pyx_t_17;
      for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) {
        __pyx_v_ii = __pyx_t_37;
 2026:                 # For fast accessing
+2027:                 len_lim = lstruct_nlim[ii]
        __pyx_t_38 = __pyx_v_ii;
        __pyx_v_len_lim = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_38)) )));
 2028:                 # We get the limits if any
+2029:                 if len_lim == 0:
        switch (__pyx_v_len_lim) {
          case 0:
/* … */
          break;
          case 1:
+2030:                     lslim = [None]
          __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2030, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_1);
          __pyx_t_1 = 0;
+2031:                     lstruct_nlim[ii] = lstruct_nlim[ii] + 1
          __pyx_t_39 = __pyx_v_ii;
          __pyx_t_40 = __pyx_v_ii;
          *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_40)) )) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_39)) ))) + 1);
+2032:                 elif len_lim == 1:
          break;
          default:
+2033:                     lslim = [[lstruct_lims[ii][0, 0], lstruct_lims[ii][0, 1]]]
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2033, __pyx_L1_error)
          }
          __pyx_t_1 = __Pyx_PyObject_GetItem(PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii), __pyx_tuple__33); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2033, __pyx_L1_error)
          }
          __pyx_t_9 = __Pyx_PyObject_GetItem(PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii), __pyx_tuple__34); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_11 = PyList_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_1);
          PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_9);
          PyList_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
          __pyx_t_1 = 0;
          __pyx_t_9 = 0;
          __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_11);
          PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_11);
          __pyx_t_11 = 0;
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_9);
          __pyx_t_9 = 0;
 2034:                 else:
+2035:                     lslim = lstruct_lims[ii]
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2035, __pyx_L1_error)
          }
          __pyx_t_9 = PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_9);
          __pyx_t_9 = 0;
          break;
        }
 2036:                 # We get the number of vertices and limits of the struct's poly
+2037:                 if ii == 0:
        __pyx_t_3 = ((__pyx_v_ii == 0) != 0);
        if (__pyx_t_3) {
/* … */
          goto __pyx_L77;
        }
+2038:                     lsz_lim[0] = 0
          (__pyx_v_lsz_lim[0]) = 0;
+2039:                     nvert = lnvert[0]
          __pyx_t_41 = 0;
          __pyx_v_nvert = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_41)) )));
+2040:                     ind_min = 0
          __pyx_v_ind_min = 0;
 2041:                 else:
+2042:                     nvert = lnvert[ii] - lnvert[ii - 1]
        /*else*/ {
          __pyx_t_42 = __pyx_v_ii;
          __pyx_t_43 = (__pyx_v_ii - 1);
          __pyx_v_nvert = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_42)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_43)) ))));
+2043:                     lsz_lim[ii] = lstruct_nlim[ii-1] + lsz_lim[ii-1]
          __pyx_t_44 = (__pyx_v_ii - 1);
          (__pyx_v_lsz_lim[__pyx_v_ii]) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_44)) ))) + (__pyx_v_lsz_lim[(__pyx_v_ii - 1)]));
+2044:                     ind_min = lnvert[ii-1]
          __pyx_t_45 = (__pyx_v_ii - 1);
          __pyx_v_ind_min = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_45)) )));
        }
        __pyx_L77:;
 2045:                 # and loop over the limits (one continous structure)
+2046:                 for jj in range(max(len_lim,1)):
        __pyx_t_46 = 1;
        __pyx_t_47 = __pyx_v_len_lim;
        if (((__pyx_t_46 > __pyx_t_47) != 0)) {
          __pyx_t_48 = __pyx_t_46;
        } else {
          __pyx_t_48 = __pyx_t_47;
        }
        __pyx_t_46 = __pyx_t_48;
        __pyx_t_48 = __pyx_t_46;
        for (__pyx_t_47 = 0; __pyx_t_47 < __pyx_t_48; __pyx_t_47+=1) {
          __pyx_v_jj = __pyx_t_47;
 2047:                     # We compute the structure's bounding box:
+2048:                     if lslim[jj] is not None:
          __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2048, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_3 = (__pyx_t_9 != Py_None);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_6 = (__pyx_t_3 != 0);
          if (__pyx_t_6) {
/* … */
            goto __pyx_L80;
          }
+2049:                         lim_ves[0] = lslim[jj][0]
            __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2049, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2049, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_11); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2049, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            (__pyx_v_lim_ves[0]) = __pyx_t_24;
+2050:                         lim_ves[1] = lslim[jj][1]
            __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_11, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2050, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            (__pyx_v_lim_ves[1]) = __pyx_t_24;
+2051:                         llimits[ind_struct] = 0 # False : struct is limited
            (__pyx_v_llimits[__pyx_v_ind_struct]) = 0;
+2052:                         lim_min = Catan2(Csin(lim_ves[0]), Ccos(lim_ves[0]))
            __pyx_v_lim_min = atan2(sin((__pyx_v_lim_ves[0])), cos((__pyx_v_lim_ves[0])));
+2053:                         lim_max = Catan2(Csin(lim_ves[1]), Ccos(lim_ves[1]))
            __pyx_v_lim_max = atan2(sin((__pyx_v_lim_ves[1])), cos((__pyx_v_lim_ves[1])));
+2054:                         comp_bbox_poly_tor_lim(nvert,
            __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(__pyx_v_nvert, (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyx.data) + __pyx_t_49)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyy.data) + __pyx_t_50)) )))), (&(__pyx_v_lbounds[(__pyx_v_ind_struct * 6)])), __pyx_v_lim_min, __pyx_v_lim_max);
+2055:                                                &lstruct_polyx[ind_min],
            __pyx_t_49 = __pyx_v_ind_min;
+2056:                                                &lstruct_polyy[ind_min],
            __pyx_t_50 = __pyx_v_ind_min;
 2057:                                                &lbounds[ind_struct*6],
 2058:                                                lim_min, lim_max)
 2059:                     else:
+2060:                         llimits[ind_struct] = 1 # True : is continous
          /*else*/ {
            (__pyx_v_llimits[__pyx_v_ind_struct]) = 1;
+2061:                         comp_bbox_poly_tor(nvert,
            __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(__pyx_v_nvert, (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyx.data) + __pyx_t_51)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyy.data) + __pyx_t_52)) )))), (&(__pyx_v_lbounds[(__pyx_v_ind_struct * 6)])));
+2062:                                            &lstruct_polyx[ind_min],
            __pyx_t_51 = __pyx_v_ind_min;
+2063:                                            &lstruct_polyy[ind_min],
            __pyx_t_52 = __pyx_v_ind_min;
 2064:                                            &lbounds[ind_struct*6])
+2065:                         lim_min = 0.
            __pyx_v_lim_min = 0.;
+2066:                         lim_max = 0.
            __pyx_v_lim_max = 0.;
          }
          __pyx_L80:;
+2067:                     langles[ind_struct*2] = lim_min
          (__pyx_v_langles[(__pyx_v_ind_struct * 2)]) = __pyx_v_lim_min;
+2068:                     langles[ind_struct*2 + 1] = lim_max
          (__pyx_v_langles[((__pyx_v_ind_struct * 2) + 1)]) = __pyx_v_lim_max;
+2069:                     ind_struct = 1 + ind_struct
          __pyx_v_ind_struct = (1 + __pyx_v_ind_struct);
        }
      }
 2070:             # end loops over structures
 2071: 
 2072:             # -- Computing intersection between structures and LOS -------------
+2073:             raytracing_inout_struct_tor(num_los, ray_vdir, ray_orig,
      __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_tor(__pyx_v_num_los, __pyx_v_ray_vdir, __pyx_v_ray_orig, __pyx_t_26, __pyx_t_25, __pyx_t_22, __pyx_v_lstruct_nlim, __pyx_t_27, __pyx_v_forbid0, __pyx_v_forbidbis, __pyx_v_rmin, __pyx_v_rmin2, __pyx_v_Crit2_base, __pyx_v_nstruct_lim, __pyx_v_lbounds, __pyx_v_langles, __pyx_v_llimits, (&(*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_53)) )))), __pyx_v_lsz_lim, (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyx.data) + __pyx_t_54)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyy.data) + __pyx_t_55)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_normx.data) + __pyx_t_56)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_normy.data) + __pyx_t_57)) )))), __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_num_threads, 1);
      __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
      __pyx_t_26.memview = NULL;
      __pyx_t_26.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
      __pyx_t_25.memview = NULL;
      __pyx_t_25.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
      __pyx_t_22.memview = NULL;
      __pyx_t_22.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
      __pyx_t_27.memview = NULL;
      __pyx_t_27.data = NULL;
+2074:                                         coeff_inter_out, coeff_inter_in,
      __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 2074, __pyx_L1_error)
      __pyx_t_25 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_in), PyBUF_WRITABLE); if (unlikely(!__pyx_t_25.memview)) __PYX_ERR(0, 2074, __pyx_L1_error)
+2075:                                         vperp_out, lstruct_nlim, ind_inter_out,
      __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_vperp_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 2075, __pyx_L1_error)
      __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 2075, __pyx_L1_error)
 2076:                                         forbid0, forbidbis,
 2077:                                         rmin, rmin2, Crit2_base,
 2078:                                         nstruct_lim,
 2079:                                         lbounds, langles, llimits,
+2080:                                         &lnvert[0], lsz_lim,
      __pyx_t_53 = 0;
+2081:                                         &lstruct_polyx[0], &lstruct_polyy[0],
      __pyx_t_54 = 0;
      __pyx_t_55 = 0;
+2082:                                         &lstruct_normx[0], &lstruct_normy[0],
      __pyx_t_56 = 0;
      __pyx_t_57 = 0;
 2083:                                         eps_uz, eps_vz, eps_a, eps_b, eps_plane,
 2084:                                         num_threads,
 2085:                                         True) # the structure is "OUT"
+2086:             free(lsz_lim)
      free(__pyx_v_lsz_lim);
+2087:             free(llimits)
      free(__pyx_v_llimits);
 2088:     else:
 2089:         # .. if there are, we get the limits for the vessel ....................
+2090:         if ves_lims is None  or np.size(ves_lims) == 0:
  /*else*/ {
    __pyx_t_3 = ((((PyObject *) __pyx_v_ves_lims.memview) == Py_None) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_6 = __pyx_t_3;
      goto __pyx_L82_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_t_11 = __pyx_memoryview_fromslice(__pyx_v_ves_lims, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_9 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_9, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2090, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = __pyx_t_3;
    __pyx_L82_bool_binop_done:;
    if (__pyx_t_6) {
/* … */
      goto __pyx_L81;
    }
+2091:             are_limited = False
      __pyx_v_are_limited = 0;
+2092:             lbounds_ves[0] = 0
      (__pyx_v_lbounds_ves[0]) = 0.0;
+2093:             lbounds_ves[1] = 0
      (__pyx_v_lbounds_ves[1]) = 0.0;
 2094:         else:
+2095:             are_limited = True
    /*else*/ {
      __pyx_v_are_limited = 1;
+2096:             lbounds_ves[0] = ves_lims[0]
      __pyx_t_58 = 0;
      (__pyx_v_lbounds_ves[0]) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_58)) )));
+2097:             lbounds_ves[1] = ves_lims[1]
      __pyx_t_59 = 1;
      (__pyx_v_lbounds_ves[1]) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_59)) )));
    }
    __pyx_L81:;
 2098: 
 2099:         # -- Cylindrical case --------------------------------------------------
+2100:         raytracing_inout_struct_lin(num_los, ray_orig, ray_vdir, npts_poly,
    __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_lin(__pyx_v_num_los, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_npts_poly, (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_60 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_61)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_62 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_63)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_64 * __pyx_v_ves_norm.strides[0]) )) + __pyx_t_65)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_66 * __pyx_v_ves_norm.strides[0]) )) + __pyx_t_67)) )))), (__pyx_v_lbounds_ves[0]), (__pyx_v_lbounds_ves[1]), __pyx_t_22, __pyx_t_25, __pyx_t_26, __pyx_t_27, __pyx_v_eps_plane, 0, 0);
    __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
    __pyx_t_22.memview = NULL;
    __pyx_t_22.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
    __pyx_t_25.memview = NULL;
    __pyx_t_25.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
    __pyx_t_26.memview = NULL;
    __pyx_t_26.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
    __pyx_t_27.memview = NULL;
    __pyx_t_27.data = NULL;
+2101:                                     &ves_poly[0][0], &ves_poly[1][0],
    __pyx_t_60 = 0;
    __pyx_t_61 = 0;
    __pyx_t_62 = 1;
    __pyx_t_63 = 0;
+2102:                                     &ves_norm[0][0], &ves_norm[1][0],
    __pyx_t_64 = 0;
    __pyx_t_65 = 0;
    __pyx_t_66 = 1;
    __pyx_t_67 = 0;
 2103:                                     lbounds_ves[0], lbounds_ves[1],
+2104:                                     coeff_inter_in, coeff_inter_out,
    __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_in), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 2104, __pyx_L1_error)
    __pyx_t_25 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_25.memview)) __PYX_ERR(0, 2104, __pyx_L1_error)
+2105:                                     vperp_out, ind_inter_out, eps_plane,
    __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_vperp_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 2105, __pyx_L1_error)
    __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 2105, __pyx_L1_error)
 2106:                                     0, 0) # The vessel is strcuture 0,0
 2107: 
 2108:         # -- Treating the structures (if any) ----------------------------------
+2109:         if nstruct_tot > 0:
    __pyx_t_6 = ((__pyx_v_nstruct_tot > 0) != 0);
    if (__pyx_t_6) {
/* … */
    }
  }
  __pyx_L68:;
+2110:             ind_struct = 0
      __pyx_v_ind_struct = 0;
+2111:             for ii in range(nstruct_lim):
      __pyx_t_17 = __pyx_v_nstruct_lim;
      __pyx_t_36 = __pyx_t_17;
      for (__pyx_t_37 = 0; __pyx_t_37 < __pyx_t_36; __pyx_t_37+=1) {
        __pyx_v_ii = __pyx_t_37;
 2112:                 # -- Analyzing the limits --------------------------------------
+2113:                 len_lim = lstruct_nlim[ii]
        __pyx_t_68 = __pyx_v_ii;
        __pyx_v_len_lim = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_68)) )));
 2114:                 # We get the limits if any
+2115:                 if len_lim == 0:
        switch (__pyx_v_len_lim) {
          case 0:
/* … */
          break;
          case 1:
+2116:                     lslim = [None]
          __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(Py_None);
          __Pyx_GIVEREF(Py_None);
          PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_1);
          __pyx_t_1 = 0;
+2117:                     lstruct_nlim[ii] = lstruct_nlim[ii] + 1
          __pyx_t_69 = __pyx_v_ii;
          __pyx_t_70 = __pyx_v_ii;
          *((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_70)) )) = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_69)) ))) + 1);
+2118:                 elif len_lim == 1:
          break;
          default:
+2119:                     lslim = [[lstruct_lims[ii][0, 0], lstruct_lims[ii][0, 1]]]
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2119, __pyx_L1_error)
          }
          __pyx_t_1 = __Pyx_PyObject_GetItem(PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii), __pyx_tuple__33); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2119, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2119, __pyx_L1_error)
          }
          __pyx_t_9 = __Pyx_PyObject_GetItem(PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii), __pyx_tuple__34); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2119, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_11 = PyList_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2119, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_1);
          PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_9);
          PyList_SET_ITEM(__pyx_t_11, 1, __pyx_t_9);
          __pyx_t_1 = 0;
          __pyx_t_9 = 0;
          __pyx_t_9 = PyList_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2119, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_GIVEREF(__pyx_t_11);
          PyList_SET_ITEM(__pyx_t_9, 0, __pyx_t_11);
          __pyx_t_11 = 0;
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_9);
          __pyx_t_9 = 0;
 2120:                 else:
+2121:                     lslim = lstruct_lims[ii]
          if (unlikely(__pyx_v_lstruct_lims == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
            __PYX_ERR(0, 2121, __pyx_L1_error)
          }
          __pyx_t_9 = PyList_GET_ITEM(__pyx_v_lstruct_lims, __pyx_v_ii);
          __Pyx_INCREF(__pyx_t_9);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_9);
          __pyx_t_9 = 0;
          break;
        }
+2122:                 if ii == 0:
        __pyx_t_6 = ((__pyx_v_ii == 0) != 0);
        if (__pyx_t_6) {
/* … */
          goto __pyx_L87;
        }
+2123:                     nvert = lnvert[0]
          __pyx_t_71 = 0;
          __pyx_v_nvert = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_71)) )));
+2124:                     ind_min = 0
          __pyx_v_ind_min = 0;
 2125:                 else:
+2126:                     nvert = lnvert[ii] - lnvert[ii - 1]
        /*else*/ {
          __pyx_t_72 = __pyx_v_ii;
          __pyx_t_73 = (__pyx_v_ii - 1);
          __pyx_v_nvert = ((*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_72)) ))) - (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_73)) ))));
+2127:                     ind_min = lnvert[ii-1]
          __pyx_t_74 = (__pyx_v_ii - 1);
          __pyx_v_ind_min = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_74)) )));
        }
        __pyx_L87:;
 2128:                 # and loop over the limits (one continous structure)
+2129:                 for jj in range(max(len_lim,1)):
        __pyx_t_46 = 1;
        __pyx_t_47 = __pyx_v_len_lim;
        if (((__pyx_t_46 > __pyx_t_47) != 0)) {
          __pyx_t_48 = __pyx_t_46;
        } else {
          __pyx_t_48 = __pyx_t_47;
        }
        __pyx_t_46 = __pyx_t_48;
        __pyx_t_48 = __pyx_t_46;
        for (__pyx_t_47 = 0; __pyx_t_47 < __pyx_t_48; __pyx_t_47+=1) {
          __pyx_v_jj = __pyx_t_47;
+2130:                     if lslim[jj] is not None:
          __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2130, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_6 = (__pyx_t_9 != Py_None);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_3 = (__pyx_t_6 != 0);
          if (__pyx_t_3) {
/* … */
          }
+2131:                         lbounds_ves[0] = lslim[jj][0]
            __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2131, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_9, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2131, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_11); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2131, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            (__pyx_v_lbounds_ves[0]) = __pyx_t_24;
+2132:                         lbounds_ves[1] = lslim[jj][1]
            __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2132, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_11, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2132, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2132, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            (__pyx_v_lbounds_ves[1]) = __pyx_t_24;
+2133:                     raytracing_inout_struct_lin(num_los, ray_orig, ray_vdir,
          __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_lin(__pyx_v_num_los, __pyx_v_ray_orig, __pyx_v_ray_vdir, (__pyx_v_nvert - 1), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyx.data) + __pyx_t_75)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_polyy.data) + __pyx_t_76)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_normx.data) + __pyx_t_77)) )))), (&(*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_lstruct_normy.data) + __pyx_t_78)) )))), (__pyx_v_lbounds_ves[0]), (__pyx_v_lbounds_ves[1]), __pyx_t_26, __pyx_t_25, __pyx_t_22, __pyx_t_27, __pyx_v_eps_plane, (__pyx_v_ii + 1), __pyx_v_jj);
          __PYX_XDEC_MEMVIEW(&__pyx_t_26, 1);
          __pyx_t_26.memview = NULL;
          __pyx_t_26.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_25, 1);
          __pyx_t_25.memview = NULL;
          __pyx_t_25.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
          __pyx_t_22.memview = NULL;
          __pyx_t_22.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_27, 1);
          __pyx_t_27.memview = NULL;
          __pyx_t_27.data = NULL;
        }
      }
 2134:                                                 nvert-1,
+2135:                                                 &lstruct_polyx[ind_min],
          __pyx_t_75 = __pyx_v_ind_min;
+2136:                                                 &lstruct_polyy[ind_min],
          __pyx_t_76 = __pyx_v_ind_min;
+2137:                                                 &lstruct_normx[ind_min-ii],
          __pyx_t_77 = (__pyx_v_ind_min - __pyx_v_ii);
+2138:                                                 &lstruct_normy[ind_min-ii],
          __pyx_t_78 = (__pyx_v_ind_min - __pyx_v_ii);
 2139:                                                 lbounds_ves[0], lbounds_ves[1],
+2140:                                                 coeff_inter_in, coeff_inter_out,
          __pyx_t_26 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_in), PyBUF_WRITABLE); if (unlikely(!__pyx_t_26.memview)) __PYX_ERR(0, 2140, __pyx_L1_error)
          __pyx_t_25 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_coeff_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_25.memview)) __PYX_ERR(0, 2140, __pyx_L1_error)
+2141:                                                 vperp_out, ind_inter_out,
          __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_vperp_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 2141, __pyx_L1_error)
          __pyx_t_27 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_inter_out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_27.memview)) __PYX_ERR(0, 2141, __pyx_L1_error)
 2142:                                                 eps_plane, ii+1, jj)
 2143: 
+2144:     free(lbounds)
  free(__pyx_v_lbounds);
+2145:     free(langles)
  free(__pyx_v_langles);
 2146: 
+2147:     return np.asarray(coeff_inter_in), np.asarray(coeff_inter_out),\
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_9 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_11, ((PyObject *)__pyx_v_coeff_inter_in)) : __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_v_coeff_inter_in));
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_asarray); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_12);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_12, function);
    }
  }
  __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_11, ((PyObject *)__pyx_v_coeff_inter_out)) : __Pyx_PyObject_CallOneArg(__pyx_t_12, ((PyObject *)__pyx_v_coeff_inter_out));
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_23);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_23);
  __pyx_t_9 = 0;
  __pyx_t_1 = 0;
  __pyx_t_12 = 0;
  __pyx_t_23 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
+2148:            np.transpose(np.asarray(vperp_out).reshape(num_los,3)),\
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_transpose); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, ((PyObject *)__pyx_v_vperp_out)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_vperp_out));
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reshape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_num_los); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = NULL;
  __pyx_t_17 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_17 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_2, __pyx_int_3};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_2, __pyx_int_3};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_79 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_79)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_79);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_79, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_79, 0+__pyx_t_17, __pyx_t_2);
    __Pyx_INCREF(__pyx_int_3);
    __Pyx_GIVEREF(__pyx_int_3);
    PyTuple_SET_ITEM(__pyx_t_79, 1+__pyx_t_17, __pyx_int_3);
    __pyx_t_2 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_79, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_79); __pyx_t_79 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_23))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_23);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_23);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_23, function);
    }
  }
  __pyx_t_12 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_23, __pyx_t_4, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_23, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
+2149:            np.transpose(np.asarray(ind_inter_out, dtype=int).reshape(num_los, 3))
  __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_transpose); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_79, __pyx_n_s_np); if (unlikely(!__pyx_t_79)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_79);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_79, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_79); __pyx_t_79 = 0;
  __pyx_t_79 = PyTuple_New(1); if (unlikely(!__pyx_t_79)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_79);
  __Pyx_INCREF(((PyObject *)__pyx_v_ind_inter_out));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ind_inter_out));
  PyTuple_SET_ITEM(__pyx_t_79, 0, ((PyObject *)__pyx_v_ind_inter_out));
  __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 2149, __pyx_L1_error)
  __pyx_t_80 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_79, __pyx_t_10); if (unlikely(!__pyx_t_80)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_80);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_79); __pyx_t_79 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_80, __pyx_n_s_reshape); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_80); __pyx_t_80 = 0;
  __pyx_t_80 = __Pyx_PyInt_From_int(__pyx_v_num_los); if (unlikely(!__pyx_t_80)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_80);
  __pyx_t_79 = NULL;
  __pyx_t_17 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_79 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_79)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_79);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
      __pyx_t_17 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_79, __pyx_t_80, __pyx_int_3};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_79); __pyx_t_79 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_80); __pyx_t_80 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
    PyObject *__pyx_temp[3] = {__pyx_t_79, __pyx_t_80, __pyx_int_3};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_79); __pyx_t_79 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_80); __pyx_t_80 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_79) {
      __Pyx_GIVEREF(__pyx_t_79); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_79); __pyx_t_79 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_80);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_17, __pyx_t_80);
    __Pyx_INCREF(__pyx_int_3);
    __Pyx_GIVEREF(__pyx_int_3);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_17, __pyx_int_3);
    __pyx_t_80 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_2, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_23 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_23);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 2150: 
 2151: 
+2152: cdef inline void raytracing_inout_struct_tor(int num_los,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_tor(CYTHON_UNUSED int __pyx_v_num_los, __Pyx_memviewslice __pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ray_orig, __Pyx_memviewslice __pyx_v_coeff_inter_out, __Pyx_memviewslice __pyx_v_coeff_inter_in, __Pyx_memviewslice __pyx_v_vperp_out, __Pyx_memviewslice __pyx_v_lstruct_nlim, __Pyx_memviewslice __pyx_v_ind_inter_out, int __pyx_v_forbid0, int __pyx_v_forbidbis, double __pyx_v_rmin, double __pyx_v_rmin2, double __pyx_v_crit2_base, int __pyx_v_nstruct_lim, double *__pyx_v_lbounds, double *__pyx_v_langles, int *__pyx_v_lis_limited, long *__pyx_v_lnvert, long *__pyx_v_lsz_lim, double *__pyx_v_lstruct_polyx, double *__pyx_v_lstruct_polyy, double *__pyx_v_lstruct_normx, double *__pyx_v_lstruct_normy, double __pyx_v_eps_uz, double __pyx_v_eps_vz, double __pyx_v_eps_a, double __pyx_v_eps_b, double __pyx_v_eps_plane, int __pyx_v_num_threads, int __pyx_v_is_out_struct) {
  double __pyx_v_upscaDp;
  double __pyx_v_upar2;
  double __pyx_v_dpar2;
  double __pyx_v_crit2;
  double __pyx_v_idpar2;
  double __pyx_v_dist;
  double __pyx_v_s1x;
  double __pyx_v_s1y;
  double __pyx_v_s2x;
  double __pyx_v_s2y;
  double __pyx_v_lim_min;
  double __pyx_v_lim_max;
  double __pyx_v_invuz;
  int __pyx_v_totnvert;
  int __pyx_v_nvert;
  int __pyx_v_ind_struct;
  int __pyx_v_ind_los;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_lim_is_none;
  int __pyx_v_found_new_kout;
  int __pyx_v_inter_bbox;
  double *__pyx_v_last_pout;
  double *__pyx_v_kpout_loc;
  double *__pyx_v_kpin_loc;
  double *__pyx_v_invr_ray;
  double *__pyx_v_loc_org;
  double *__pyx_v_loc_dir;
  double *__pyx_v_lim_ves;
  double *__pyx_v_loc_vp;
  int *__pyx_v_sign_ray;
  int *__pyx_v_ind_loc;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 2153:                                              double[:,::1] ray_vdir,
 2154:                                              double[:,::1] ray_orig,
 2155:                                              double[::1] coeff_inter_out,
 2156:                                              double[::1] coeff_inter_in,
 2157:                                              double[::1] vperp_out,
 2158:                                              long[::1] lstruct_nlim,
 2159:                                              int[::1] ind_inter_out,
 2160:                                              bint forbid0, bint forbidbis,
 2161:                                              double rmin, double rmin2,
 2162:                                              double crit2_base,
 2163:                                              int nstruct_lim,
 2164:                                              double* lbounds, double* langles,
 2165:                                              int* lis_limited, long* lnvert,
 2166:                                              long* lsz_lim,
 2167:                                              double* lstruct_polyx,
 2168:                                              double* lstruct_polyy,
 2169:                                              double* lstruct_normx,
 2170:                                              double* lstruct_normy,
 2171:                                              double eps_uz, double eps_vz,
 2172:                                              double eps_a, double eps_b,
 2173:                                              double eps_plane,
 2174:                                              int num_threads,
 2175:                                              bint is_out_struct) nogil:
 2176:     """
 2177:     Computes the entry and exit point of all provided LOS/rays for a set of
 2178:     structures that can be of type "OUT" (is_out_struct=True) or "IN"
 2179:     (is_out_struct=False) in a TORE. An "OUT" structure cannot be penetrated
 2180:     whereas an "IN" structure can. The latter is typically a vessel and are
 2181:     toroidally continous. If a structure is limited we can determine the number
 2182:     of limits and the limits itself. For optimization reasons we will also pass
 2183:     the bounding box limits. And the information of the last intersected point,
 2184:     if any.
 2185:     This functions is parallelized.
 2186: 
 2187:     Params
 2188:     ======
 2189:     num_los : int
 2190:        Total number of lines of sight (LOS) (aka. rays)
 2191:     ray_vdir : (3, num_los) double array
 2192:        LOS normalized direction vector
 2193:     ray_orig : (3, num_los) double array
 2194:        LOS origin points coordinates
 2195:     coeff_inter_out : (num_los) double array <INOUT>
 2196:        Coefficient of exit (kout) of the last point of intersection for each LOS
 2197:        with the global geometry (with ALL structures)
 2198:     coeff_inter_in : (num_los) double array <INOUT>
 2199:        Coefficient of entry (kin) of the last point of intersection for each LOS
 2200:        with the global geometry (with ALL structures). If intersection at origin
 2201:        k = 0, if no intersection k = NAN
 2202:     vperp_out : (3*num_los) double array <INOUT>
 2203:        Coordinates of the normal vector of impact of the LOS (0 if none). It is
 2204:        stored in the following way [v_{0,x}, v_{0,y}, v_{0,z}, ..., v_{n-1,z}]
 2205:     lstruct_nlim : array of ints
 2206:        List of number of limits for all structures
 2207:     ind_inter_out : (3 * num_los)  <INOUT>
 2208:        Index of structure impacted by LOS such that:
 2209:                 ind_inter_out[ind_los*3:ind_los*3+3]=(i,j,k)
 2210:        where k is the index of edge impacted on the j-th sub structure of the
 2211:        structure number i. If the LOS impacted the vessel i=j=0
 2212:     forbid0 : bool
 2213:        Should we forbid values behind vissible radius ? (see Rmin). If false,
 2214:        will test "hidden" part always, else, it will depend on the LOS and
 2215:        on forbidbis.
 2216:     forbidbis: bint
 2217:        Should we forbid values behind vissible radius for each LOS ?
 2218:     rmin : double
 2219:        Minimal radius of vessel to take into consideration
 2220:     rmin2 : double
 2221:        Squared valued of the minimal radius
 2222:     crit2_base : double
 2223:        Critical value to evaluate for each LOS if horizontal or not
 2224:     nstruct_lim : int
 2225:        Number of OUT structures (not counting the limited versions).
 2226:        If not is_out_struct then lenght of vpoly.
 2227:     lbounds : (6 * nstruct) double array
 2228:        Coordinates of lower and upper edges of the bounding box for each
 2229:        structures (nstruct = sum_i(nstruct_lim * lsz_lim[i])
 2230:        If not is_out_struct then NULL
 2231:     langles : (2 * nstruct) double array
 2232:        Minimum and maximum angles where the structure lives. If the structure
 2233:        number 'i' is toroidally continous then langles[i:i+2] = [0, 0].
 2234:     lis_limited : (nstruct) int array
 2235:        List of bool to know if the structures (or the vessel) is limited or not.
 2236:     lnvert : (nstruct_lim) int array
 2237:        List of vertices of each polygon for each structure
 2238:        If not is_out_struct then NULL
 2239:     lsz_lim : (nstruct) int array
 2240:        List of the total number of structures before the ith structure. First
 2241:        element is always 0, else lsz_lim[i] = sum_j(lstruct_nlim[j], j=0..i-1)
 2242:        If not is_out_struct then NULL
 2243:     lstruct_polyx : (ntotnvert)
 2244:        List of "x" coordinates of the polygon's vertices of all structures on
 2245:        the poloidal plane
 2246:     lstruct_polyy : (ntotnvert)
 2247:        List of "y" coordinates of the polygon's vertices of all structures on
 2248:        the poloidal plane
 2249:     lstruct_normx : (2, num_vertex-1) double array
 2250:        List of "x" coordinates of the normal vectors going "inwards" of the
 2251:         edges of the Polygon defined by lstruct_poly
 2252:     lstruct_normy : (2, num_vertex-1) double array
 2253:        List of "y" coordinates of the normal vectors going "inwards" of the
 2254:         edges of the Polygon defined by lstruct_poly
 2255:     eps<val> : double
 2256:        Small value, acceptance of error
 2257:     num_threads : int
 2258:        The num_threads argument indicates how many threads the team should
 2259:        consist of. If not given, OpenMP will decide how many threads to use.
 2260:        Typically this is the number of cores available on the machine.
 2261:     is_out_struct : bint
 2262:        Bool to determine if the structure is "OUT" or "IN". An "OUT" structure
 2263:        cannot be penetrated whereas an "IN" structure can. The latter is
 2264:        typically a vessel and are toroidally continous.
 2265:     """
+2266:     cdef double upscaDp=0., upar2=0., dpar2=0., crit2=0., idpar2=0.
  __pyx_v_upscaDp = 0.;
  __pyx_v_upar2 = 0.;
  __pyx_v_dpar2 = 0.;
  __pyx_v_crit2 = 0.;
  __pyx_v_idpar2 = 0.;
+2267:     cdef double dist = 0., s1x = 0., s1y = 0., s2x = 0., s2y = 0.
  __pyx_v_dist = 0.;
  __pyx_v_s1x = 0.;
  __pyx_v_s1y = 0.;
  __pyx_v_s2x = 0.;
  __pyx_v_s2y = 0.;
+2268:     cdef double lim_min=0., lim_max=0., invuz=0.
  __pyx_v_lim_min = 0.;
  __pyx_v_lim_max = 0.;
  __pyx_v_invuz = 0.;
+2269:     cdef int totnvert=0
  __pyx_v_totnvert = 0;
 2270:     cdef int nvert
 2271:     cdef int ind_struct, ind_bounds
 2272:     cdef int ind_los, ii, jj, kk
 2273:     cdef bint lim_is_none
 2274:     cdef bint found_new_kout
 2275:     cdef bint inter_bbox
+2276:     cdef double* last_pout = NULL
  __pyx_v_last_pout = NULL;
+2277:     cdef double* kpout_loc = NULL
  __pyx_v_kpout_loc = NULL;
+2278:     cdef double* kpin_loc = NULL
  __pyx_v_kpin_loc = NULL;
+2279:     cdef double* invr_ray = NULL
  __pyx_v_invr_ray = NULL;
+2280:     cdef double* loc_org = NULL
  __pyx_v_loc_org = NULL;
+2281:     cdef double* loc_dir = NULL
  __pyx_v_loc_dir = NULL;
+2282:     cdef double* lim_ves = NULL
  __pyx_v_lim_ves = NULL;
+2283:     cdef double* loc_vp = NULL
  __pyx_v_loc_vp = NULL;
+2284:     cdef int* sign_ray = NULL
  __pyx_v_sign_ray = NULL;
+2285:     cdef int* ind_loc = NULL
  __pyx_v_ind_loc = NULL;
 2286: 
 2287:     # == Defining parallel part ================================================
+2288:     with nogil, parallel(num_threads=num_threads):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_ind_loc, __pyx_v_invr_ray, __pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_last_pout, __pyx_v_lim_ves, __pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_loc_vp, __pyx_v_sign_ray)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_ind_loc, __pyx_v_invr_ray, __pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_last_pout, __pyx_v_lim_ves, __pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_loc_vp, __pyx_v_sign_ray) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_ind_loc = ((int *)1);
                __pyx_v_invr_ray = ((double *)1);
                __pyx_v_kpin_loc = ((double *)1);
                __pyx_v_kpout_loc = ((double *)1);
                __pyx_v_last_pout = ((double *)1);
                __pyx_v_lim_ves = ((double *)1);
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
                __pyx_v_loc_vp = ((double *)1);
                __pyx_v_sign_ray = ((int *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
 2289:         # We use local arrays for each thread so
+2290:         loc_org   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_org = ((double *)malloc(((sizeof(double)) * 3)));
+2291:         loc_dir   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_dir = ((double *)malloc(((sizeof(double)) * 3)));
+2292:         loc_vp    = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_vp = ((double *)malloc(((sizeof(double)) * 3)));
+2293:         kpin_loc  = <double *> malloc(sizeof(double) * 1)
                __pyx_v_kpin_loc = ((double *)malloc(((sizeof(double)) * 1)));
+2294:         kpout_loc = <double *> malloc(sizeof(double) * 1)
                __pyx_v_kpout_loc = ((double *)malloc(((sizeof(double)) * 1)));
+2295:         ind_loc   = <int *> malloc(sizeof(int) * 1)
                __pyx_v_ind_loc = ((int *)malloc(((sizeof(int)) * 1)));
+2296:         if is_out_struct:
                __pyx_t_1 = (__pyx_v_is_out_struct != 0);
                if (__pyx_t_1) {
/* … */
                }
 2297:             # if the structure is "out" (solid) we need more arrays
+2298:             last_pout = <double *> malloc(sizeof(double) * 3)
                  __pyx_v_last_pout = ((double *)malloc(((sizeof(double)) * 3)));
+2299:             invr_ray  = <double *> malloc(sizeof(double) * 3)
                  __pyx_v_invr_ray = ((double *)malloc(((sizeof(double)) * 3)));
+2300:             lim_ves   = <double *> malloc(sizeof(double) * 2)
                  __pyx_v_lim_ves = ((double *)malloc(((sizeof(double)) * 2)));
+2301:             sign_ray  = <int *> malloc(sizeof(int) * 3)
                  __pyx_v_sign_ray = ((int *)malloc(((sizeof(int)) * 3)));
 2302: 
 2303:         # == The parallelization over the LOS ==================================
+2304:         for ind_los in prange(num_los, schedule='dynamic'):
                __pyx_t_2 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_4 = (__pyx_t_2 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_4 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dist) lastprivate(__pyx_v_dpar2) lastprivate(__pyx_v_forbidbis) lastprivate(__pyx_v_found_new_kout) lastprivate(__pyx_v_idpar2) lastprivate(__pyx_v_ii) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_struct) lastprivate(__pyx_v_inter_bbox) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_jj) lastprivate(__pyx_v_lim_is_none) lastprivate(__pyx_v_lim_max) lastprivate(__pyx_v_lim_min) lastprivate(__pyx_v_nvert) lastprivate(__pyx_v_s1x) lastprivate(__pyx_v_s1y) lastprivate(__pyx_v_s2x) lastprivate(__pyx_v_s2y) lastprivate(__pyx_v_totnvert) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_4; __pyx_t_3++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_3);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dist = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_forbidbis = ((int)0xbad0bad0);
                                __pyx_v_found_new_kout = ((int)0xbad0bad0);
                                __pyx_v_idpar2 = ((double)__PYX_NAN());
                                __pyx_v_ii = ((int)0xbad0bad0);
                                __pyx_v_ind_struct = ((int)0xbad0bad0);
                                __pyx_v_inter_bbox = ((int)0xbad0bad0);
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_jj = ((int)0xbad0bad0);
                                __pyx_v_lim_is_none = ((int)0xbad0bad0);
                                __pyx_v_lim_max = ((double)__PYX_NAN());
                                __pyx_v_lim_min = ((double)__PYX_NAN());
                                __pyx_v_nvert = ((int)0xbad0bad0);
                                __pyx_v_s1x = ((double)__PYX_NAN());
                                __pyx_v_s1y = ((double)__PYX_NAN());
                                __pyx_v_s2x = ((double)__PYX_NAN());
                                __pyx_v_s2y = ((double)__PYX_NAN());
                                __pyx_v_totnvert = ((int)0xbad0bad0);
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+2305:             ind_struct = 0
                                __pyx_v_ind_struct = 0;
+2306:             loc_org[0] = ray_orig[0, ind_los]
                                __pyx_t_5 = 0;
                                __pyx_t_6 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_5 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_6)) )));
+2307:             loc_org[1] = ray_orig[1, ind_los]
                                __pyx_t_7 = 1;
                                __pyx_t_8 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_7 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_8)) )));
+2308:             loc_org[2] = ray_orig[2, ind_los]
                                __pyx_t_9 = 2;
                                __pyx_t_10 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_9 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_10)) )));
+2309:             loc_dir[0] = ray_vdir[0, ind_los]
                                __pyx_t_11 = 0;
                                __pyx_t_12 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_11 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_12)) )));
+2310:             loc_dir[1] = ray_vdir[1, ind_los]
                                __pyx_t_13 = 1;
                                __pyx_t_14 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_13 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_14)) )));
+2311:             loc_dir[2] = ray_vdir[2, ind_los]
                                __pyx_t_15 = 2;
                                __pyx_t_16 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_15 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_16)) )));
+2312:             loc_vp[0] = 0.
                                (__pyx_v_loc_vp[0]) = 0.;
+2313:             loc_vp[1] = 0.
                                (__pyx_v_loc_vp[1]) = 0.;
+2314:             loc_vp[2] = 0.
                                (__pyx_v_loc_vp[2]) = 0.;
+2315:             if is_out_struct:
                                __pyx_t_1 = (__pyx_v_is_out_struct != 0);
                                if (__pyx_t_1) {
/* … */
                                  goto __pyx_L15;
                                }
 2316:                 # if structure is of "Out" type, then we compute the last
 2317:                 # point where it went out of a structure.
+2318:                 ind_loc[0] = ind_inter_out[2+3*ind_los]
                                  __pyx_t_17 = (2 + (3 * __pyx_v_ind_los));
                                  (__pyx_v_ind_loc[0]) = (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_17)) )));
+2319:                 kpin_loc[0] = coeff_inter_out[ind_los]
                                  __pyx_t_18 = __pyx_v_ind_los;
                                  (__pyx_v_kpin_loc[0]) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_18)) )));
+2320:                 last_pout[0] = kpin_loc[0] * loc_dir[0] + loc_org[0]
                                  (__pyx_v_last_pout[0]) = (((__pyx_v_kpin_loc[0]) * (__pyx_v_loc_dir[0])) + (__pyx_v_loc_org[0]));
+2321:                 last_pout[1] = kpin_loc[0] * loc_dir[1] + loc_org[1]
                                  (__pyx_v_last_pout[1]) = (((__pyx_v_kpin_loc[0]) * (__pyx_v_loc_dir[1])) + (__pyx_v_loc_org[1]));
+2322:                 last_pout[2] = kpin_loc[0] * loc_dir[2] + loc_org[2]
                                  (__pyx_v_last_pout[2]) = (((__pyx_v_kpin_loc[0]) * (__pyx_v_loc_dir[2])) + (__pyx_v_loc_org[2]));
+2323:                 compute_inv_and_sign(loc_dir, sign_ray, invr_ray)
                                  __pyx_f_4tofu_4geom_5_GG03_compute_inv_and_sign(__pyx_v_loc_dir, __pyx_v_sign_ray, __pyx_v_invr_ray);
 2324:             else:
+2325:                 kpout_loc[0] = 0
                                /*else*/ {
                                  (__pyx_v_kpout_loc[0]) = 0.0;
+2326:                 kpin_loc[0] = 0
                                  (__pyx_v_kpin_loc[0]) = 0.0;
+2327:                 ind_loc[0] = 0
                                  (__pyx_v_ind_loc[0]) = 0;
                                }
                                __pyx_L15:;
 2328: 
 2329:             # -- Computing values that depend on the LOS/ray -------------------
+2330:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+2331:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+2332:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+2333:             idpar2 = 1./dpar2
                                __pyx_v_idpar2 = (1. / __pyx_v_dpar2);
+2334:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+2335:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
 2336: 
 2337:             # -- Prepare in case forbid is True --------------------------------
+2338:             if forbid0 and not dpar2>0:
                                __pyx_t_19 = (__pyx_v_forbid0 != 0);
                                if (__pyx_t_19) {
                                } else {
                                  __pyx_t_1 = __pyx_t_19;
                                  goto __pyx_L17_bool_binop_done;
                                }
                                __pyx_t_19 = ((!((__pyx_v_dpar2 > 0.0) != 0)) != 0);
                                __pyx_t_1 = __pyx_t_19;
                                __pyx_L17_bool_binop_done:;
                                if (__pyx_t_1) {
/* … */
                                }
+2339:                 forbidbis = 0
                                  __pyx_v_forbidbis = 0;
+2340:             if forbidbis:
                                __pyx_t_1 = (__pyx_v_forbidbis != 0);
                                if (__pyx_t_1) {
/* … */
                                }
 2341:                 # Compute coordinates of the 2 points where the tangents touch
 2342:                 # the inner circle
+2343:                 dist = Csqrt(dpar2-rmin2)
                                  __pyx_v_dist = sqrt((__pyx_v_dpar2 - __pyx_v_rmin2));
+2344:                 s1x = (rmin2 * loc_org[0] + rmin * loc_org[1] * dist) * idpar2
                                  __pyx_v_s1x = (((__pyx_v_rmin2 * (__pyx_v_loc_org[0])) + ((__pyx_v_rmin * (__pyx_v_loc_org[1])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2345:                 s1y = (rmin2 * loc_org[1] - rmin * loc_org[0] * dist) * idpar2
                                  __pyx_v_s1y = (((__pyx_v_rmin2 * (__pyx_v_loc_org[1])) - ((__pyx_v_rmin * (__pyx_v_loc_org[0])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2346:                 s2x = (rmin2 * loc_org[0] - rmin * loc_org[1] * dist) * idpar2
                                  __pyx_v_s2x = (((__pyx_v_rmin2 * (__pyx_v_loc_org[0])) - ((__pyx_v_rmin * (__pyx_v_loc_org[1])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2347:                 s2y = (rmin2 * loc_org[1] + rmin * loc_org[0] * dist) * idpar2
                                  __pyx_v_s2y = (((__pyx_v_rmin2 * (__pyx_v_loc_org[1])) + ((__pyx_v_rmin * (__pyx_v_loc_org[0])) * __pyx_v_dist)) * __pyx_v_idpar2);
 2348: 
 2349:             # == Case "OUT" structure ==========================================
+2350:             if is_out_struct:
                                __pyx_t_1 = (__pyx_v_is_out_struct != 0);
                                if (__pyx_t_1) {
/* … */
                                  goto __pyx_L20;
                                }
 2351:                 # We work on each structure
+2352:                 for ii in range(nstruct_lim):
                                  __pyx_t_20 = __pyx_v_nstruct_lim;
                                  __pyx_t_21 = __pyx_t_20;
                                  for (__pyx_t_22 = 0; __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
                                    __pyx_v_ii = __pyx_t_22;
 2353:                     # -- Getting structure's data ------------------------------
+2354:                     if ii == 0:
                                    __pyx_t_1 = ((__pyx_v_ii == 0) != 0);
                                    if (__pyx_t_1) {
/* … */
                                      goto __pyx_L23;
                                    }
+2355:                         nvert = lnvert[0]
                                      __pyx_v_nvert = (__pyx_v_lnvert[0]);
+2356:                         totnvert = 0
                                      __pyx_v_totnvert = 0;
 2357:                     else:
+2358:                         totnvert = lnvert[ii-1]
                                    /*else*/ {
                                      __pyx_v_totnvert = (__pyx_v_lnvert[(__pyx_v_ii - 1)]);
+2359:                         nvert = lnvert[ii] - totnvert
                                      __pyx_v_nvert = ((__pyx_v_lnvert[__pyx_v_ii]) - __pyx_v_totnvert);
                                    }
                                    __pyx_L23:;
+2360:                     ind_struct = lsz_lim[ii]
                                    __pyx_v_ind_struct = (__pyx_v_lsz_lim[__pyx_v_ii]);
 2361:                     # -- Working on the structure limited ----------------------
+2362:                     for jj in range(lstruct_nlim[ii]):
                                    __pyx_t_23 = __pyx_v_ii;
                                    __pyx_t_24 = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lstruct_nlim.data) + __pyx_t_23)) )));
                                    __pyx_t_25 = __pyx_t_24;
                                    for (__pyx_t_26 = 0; __pyx_t_26 < __pyx_t_25; __pyx_t_26+=1) {
                                      __pyx_v_jj = __pyx_t_26;
+2363:                         lim_min = langles[(ind_struct+jj)*2]
                                      __pyx_v_lim_min = (__pyx_v_langles[((__pyx_v_ind_struct + __pyx_v_jj) * 2)]);
+2364:                         lim_max = langles[(ind_struct+jj)*2 + 1]
                                      __pyx_v_lim_max = (__pyx_v_langles[(((__pyx_v_ind_struct + __pyx_v_jj) * 2) + 1)]);
+2365:                         lim_is_none = lis_limited[ind_struct+jj] == 1
                                      __pyx_v_lim_is_none = ((__pyx_v_lis_limited[(__pyx_v_ind_struct + __pyx_v_jj)]) == 1);
 2366:                         # We test if it is really necessary to compute the inter
 2367:                         # ie. we check if the ray intersects the bounding box
+2368:                         inter_bbox = inter_ray_aabb_box(sign_ray, invr_ray,
                                      __pyx_t_27.__pyx_n = 1;
                                      __pyx_t_27.countin = 1;
                                      __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03_inter_ray_aabb_box(__pyx_v_sign_ray, __pyx_v_invr_ray, (&(__pyx_v_lbounds[((__pyx_v_ind_struct + __pyx_v_jj) * 6)])), __pyx_v_loc_org, &__pyx_t_27); 
                                      __pyx_v_inter_bbox = __pyx_t_1;
 2369:                                                         &lbounds[(ind_struct + jj)*6],
 2370:                                                         loc_org,
 2371:                                                         countin=True)
+2372:                         if not inter_bbox:
                                      __pyx_t_1 = ((!(__pyx_v_inter_bbox != 0)) != 0);
                                      if (__pyx_t_1) {
/* … */
                                      }
+2373:                             continue
                                        goto __pyx_L24_continue;
 2374:                         # We check that the bounding box is not "behind"
 2375:                         # the last POut encountered
+2376:                         inter_bbox = inter_ray_aabb_box(sign_ray, invr_ray,
                                      __pyx_t_27.__pyx_n = 1;
                                      __pyx_t_27.countin = 0;
                                      __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03_inter_ray_aabb_box(__pyx_v_sign_ray, __pyx_v_invr_ray, (&(__pyx_v_lbounds[((__pyx_v_ind_struct + __pyx_v_jj) * 6)])), __pyx_v_last_pout, &__pyx_t_27); 
                                      __pyx_v_inter_bbox = __pyx_t_1;
 2377:                                                         &lbounds[(ind_struct + jj)*6],
 2378:                                                         last_pout, countin=False)
+2379:                         if inter_bbox:
                                      __pyx_t_1 = (__pyx_v_inter_bbox != 0);
                                      if (__pyx_t_1) {
/* … */
                                      }
+2380:                             continue
                                        goto __pyx_L24_continue;
 2381:                          # Else, we compute the new values
 2382:                         found_new_kout \
+2383:                             = comp_inter_los_vpoly(loc_org,
                                      __pyx_v_found_new_kout = __pyx_f_4tofu_4geom_5_GG03_comp_inter_los_vpoly(__pyx_v_loc_org, __pyx_v_loc_dir, (&(__pyx_v_lstruct_polyx[__pyx_v_totnvert])), (&(__pyx_v_lstruct_polyy[__pyx_v_totnvert])), (&(__pyx_v_lstruct_normx[(__pyx_v_totnvert - __pyx_v_ii)])), (&(__pyx_v_lstruct_normy[(__pyx_v_totnvert - __pyx_v_ii)])), (__pyx_v_nvert - 1), __pyx_v_lim_is_none, __pyx_v_lim_min, __pyx_v_lim_max, __pyx_v_forbidbis, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_s1x, __pyx_v_s1y, __pyx_v_s2x, __pyx_v_s2y, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, 0, __pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_ind_loc, __pyx_v_loc_vp, NULL);
 2384:                                                    loc_dir,
 2385:                                                    &lstruct_polyx[totnvert],
 2386:                                                    &lstruct_polyy[totnvert],
 2387:                                                    &lstruct_normx[totnvert - ii],
 2388:                                                    &lstruct_normy[totnvert - ii],
 2389:                                                    nvert-1,
 2390:                                                    lim_is_none,
 2391:                                                    lim_min, lim_max,
 2392:                                                    forbidbis,
 2393:                                                    upscaDp, upar2,
 2394:                                                    dpar2, invuz,
 2395:                                                    s1x, s1y,
 2396:                                                    s2x, s2y,
 2397:                                                    crit2, eps_uz,
 2398:                                                    eps_vz, eps_a,
 2399:                                                    eps_b, eps_plane,
 2400:                                                    False,
 2401:                                                    kpin_loc,
 2402:                                                    kpout_loc,
 2403:                                                    ind_loc,
 2404:                                                    loc_vp)
+2405:                         if found_new_kout :
                                      __pyx_t_1 = (__pyx_v_found_new_kout != 0);
                                      if (__pyx_t_1) {
/* … */
                                      }
                                      __pyx_L24_continue:;
                                    }
                                  }
+2406:                             coeff_inter_out[ind_los] = kpin_loc[0]
                                        __pyx_t_28 = __pyx_v_ind_los;
                                        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_28)) )) = (__pyx_v_kpin_loc[0]);
+2407:                             vperp_out[0+3*ind_los] = loc_vp[0]
                                        __pyx_t_29 = (0 + (3 * __pyx_v_ind_los));
                                        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_29)) )) = (__pyx_v_loc_vp[0]);
+2408:                             vperp_out[1+3*ind_los] = loc_vp[1]
                                        __pyx_t_30 = (1 + (3 * __pyx_v_ind_los));
                                        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_30)) )) = (__pyx_v_loc_vp[1]);
+2409:                             vperp_out[2+3*ind_los] = loc_vp[2]
                                        __pyx_t_31 = (2 + (3 * __pyx_v_ind_los));
                                        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_31)) )) = (__pyx_v_loc_vp[2]);
+2410:                             ind_inter_out[2+3*ind_los] = ind_loc[0]
                                        __pyx_t_32 = (2 + (3 * __pyx_v_ind_los));
                                        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_32)) )) = (__pyx_v_ind_loc[0]);
+2411:                             ind_inter_out[0+3*ind_los] = 1+ii
                                        /* "tofu/geom/_GG03.pyx":2411
 *                             vperp_out[2+3*ind_los] = loc_vp[2]
 *                             ind_inter_out[2+3*ind_los] = ind_loc[0]
 *                             ind_inter_out[0+3*ind_los] = 1+ii             # <<<<<<<<<<<<<<
 *                             ind_inter_out[1+3*ind_los] = jj
 *                             last_pout[0] = (coeff_inter_out[ind_los] *
 */
                                        __pyx_t_33 = (0 + (3 * __pyx_v_ind_los));
                                        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_33)) )) = (1 + __pyx_v_ii);
+2412:                             ind_inter_out[1+3*ind_los] = jj
                                        __pyx_t_34 = (1 + (3 * __pyx_v_ind_los));
                                        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_34)) )) = __pyx_v_jj;
+2413:                             last_pout[0] = (coeff_inter_out[ind_los] *
                                        /* "tofu/geom/_GG03.pyx":2413
 *                             ind_inter_out[0+3*ind_los] = 1+ii
 *                             ind_inter_out[1+3*ind_los] = jj
 *                             last_pout[0] = (coeff_inter_out[ind_los] *             # <<<<<<<<<<<<<<
 *                                             loc_dir[0]) + loc_org[0]
 *                             last_pout[1] = (coeff_inter_out[ind_los] *
 */
                                        __pyx_t_35 = __pyx_v_ind_los;
/* … */
                                        (__pyx_v_last_pout[0]) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_35)) ))) * (__pyx_v_loc_dir[0])) + (__pyx_v_loc_org[0]));
 2414:                                             loc_dir[0]) + loc_org[0]
+2415:                             last_pout[1] = (coeff_inter_out[ind_los] *
                                        /* "tofu/geom/_GG03.pyx":2415
 *                             last_pout[0] = (coeff_inter_out[ind_los] *
 *                                             loc_dir[0]) + loc_org[0]
 *                             last_pout[1] = (coeff_inter_out[ind_los] *             # <<<<<<<<<<<<<<
 *                                             loc_dir[1]) + loc_org[1]
 *                             last_pout[2] = (coeff_inter_out[ind_los] *
 */
                                        __pyx_t_36 = __pyx_v_ind_los;
/* … */
                                        (__pyx_v_last_pout[1]) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_36)) ))) * (__pyx_v_loc_dir[1])) + (__pyx_v_loc_org[1]));
 2416:                                             loc_dir[1]) + loc_org[1]
+2417:                             last_pout[2] = (coeff_inter_out[ind_los] *
                                        __pyx_t_37 = __pyx_v_ind_los;
/* … */
                                        (__pyx_v_last_pout[2]) = (((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_37)) ))) * (__pyx_v_loc_dir[2])) + (__pyx_v_loc_org[2]));
 2418:                                             loc_dir[2]) + loc_org[2]
 2419:             else:
 2420:                 # == Case "IN" structure =======================================
 2421:                 # Nothing to do but compute intersection between vessel and LOS
+2422:                 found_new_kout = comp_inter_los_vpoly(loc_org, loc_dir,
                                /*else*/ {
/* … */
                                  __pyx_v_found_new_kout = __pyx_f_4tofu_4geom_5_GG03_comp_inter_los_vpoly(__pyx_v_loc_org, __pyx_v_loc_dir, __pyx_v_lstruct_polyx, __pyx_v_lstruct_polyy, __pyx_v_lstruct_normx, __pyx_v_lstruct_normy, __pyx_v_nstruct_lim, (__pyx_v_lis_limited[0]), (__pyx_v_langles[0]), (__pyx_v_langles[1]), __pyx_v_forbidbis, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_s1x, __pyx_v_s1y, __pyx_v_s2x, __pyx_v_s2y, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, 1, __pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_ind_loc, __pyx_v_loc_vp, NULL);
 2423:                                                       lstruct_polyx,
 2424:                                                       lstruct_polyy,
 2425:                                                       lstruct_normx,
 2426:                                                       lstruct_normy,
 2427:                                                       nstruct_lim,
 2428:                                                       lis_limited[0],
 2429:                                                       langles[0], langles[1],
 2430:                                                       forbidbis,
 2431:                                                       upscaDp, upar2,
 2432:                                                       dpar2, invuz,
 2433:                                                       s1x, s1y, s2x, s2y,
 2434:                                                       crit2, eps_uz, eps_vz,
 2435:                                                       eps_a,eps_b, eps_plane,
 2436:                                                       True,
 2437:                                                       kpin_loc, kpout_loc,
 2438:                                                       ind_loc, loc_vp)
+2439:                 if found_new_kout:
                                  __pyx_t_1 = (__pyx_v_found_new_kout != 0);
                                  if (__pyx_t_1) {
/* … */
                                    goto __pyx_L29;
                                  }
+2440:                     coeff_inter_in[ind_los]  = kpin_loc[0]
                                    __pyx_t_38 = __pyx_v_ind_los;
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_in.data) + __pyx_t_38)) )) = (__pyx_v_kpin_loc[0]);
+2441:                     coeff_inter_out[ind_los] = kpout_loc[0]
                                    __pyx_t_39 = __pyx_v_ind_los;
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_39)) )) = (__pyx_v_kpout_loc[0]);
+2442:                     ind_inter_out[2+3*ind_los] = ind_loc[0]
                                    __pyx_t_40 = (2 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_40)) )) = (__pyx_v_ind_loc[0]);
+2443:                     ind_inter_out[0+3*ind_los] = 0
                                    __pyx_t_41 = (0 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_41)) )) = 0;
+2444:                     ind_inter_out[1+3*ind_los] = 0
                                    __pyx_t_42 = (1 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_42)) )) = 0;
+2445:                     vperp_out[0+3*ind_los] = loc_vp[0]
                                    __pyx_t_43 = (0 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_43)) )) = (__pyx_v_loc_vp[0]);
+2446:                     vperp_out[1+3*ind_los] = loc_vp[1]
                                    __pyx_t_44 = (1 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_44)) )) = (__pyx_v_loc_vp[1]);
+2447:                     vperp_out[2+3*ind_los] = loc_vp[2]
                                    __pyx_t_45 = (2 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_45)) )) = (__pyx_v_loc_vp[2]);
 2448: 
 2449:                 else:
+2450:                     coeff_inter_in[ind_los]  = Cnan
                                  /*else*/ {
                                    __pyx_t_46 = __pyx_v_ind_los;
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_in.data) + __pyx_t_46)) )) = NAN;
+2451:                     coeff_inter_out[ind_los] = Cnan
                                    __pyx_t_47 = __pyx_v_ind_los;
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_coeff_inter_out.data) + __pyx_t_47)) )) = NAN;
+2452:                     ind_inter_out[2+3*ind_los] = 0
                                    __pyx_t_48 = (2 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_48)) )) = 0;
+2453:                     ind_inter_out[0+3*ind_los] = 0
                                    __pyx_t_49 = (0 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_49)) )) = 0;
+2454:                     ind_inter_out[1+3*ind_los] = 0
                                    __pyx_t_50 = (1 + (3 * __pyx_v_ind_los));
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_inter_out.data) + __pyx_t_50)) )) = 0;
+2455:                     vperp_out[0+3*ind_los] = 0.
                                    __pyx_t_51 = (0 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_51)) )) = 0.;
+2456:                     vperp_out[1+3*ind_los] = 0.
                                    __pyx_t_52 = (1 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_52)) )) = 0.;
+2457:                     vperp_out[2+3*ind_los] = 0.
                                    __pyx_t_53 = (2 + (3 * __pyx_v_ind_los));
                                    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperp_out.data) + __pyx_t_53)) )) = 0.;
                                  }
                                  __pyx_L29:;
                                }
                                __pyx_L20:;
                            }
                        }
                    }
                }
 2458:             # end case IN/OUT
+2459:         free(loc_org)
                free(__pyx_v_loc_org);
+2460:         free(loc_dir)
                free(__pyx_v_loc_dir);
+2461:         free(loc_vp)
                free(__pyx_v_loc_vp);
+2462:         free(kpin_loc)
                free(__pyx_v_kpin_loc);
+2463:         free(kpout_loc)
                free(__pyx_v_kpout_loc);
+2464:         free(ind_loc)
                free(__pyx_v_ind_loc);
+2465:         if is_out_struct:
                __pyx_t_1 = (__pyx_v_is_out_struct != 0);
                if (__pyx_t_1) {
/* … */
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+2466:             free(last_pout)
                  free(__pyx_v_last_pout);
+2467:             free(lim_ves)
                  free(__pyx_v_lim_ves);
+2468:             free(invr_ray)
                  free(__pyx_v_invr_ray);
+2469:             free(sign_ray)
                  free(__pyx_v_sign_ray);
+2470:     return
  goto __pyx_L0;
 2471: 
 2472: 
+2473: cdef inline void raytracing_inout_struct_lin(int Nl,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_raytracing_inout_struct_lin(int __pyx_v_Nl, __Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, int __pyx_v_Ns, double *__pyx_v_polyx_tab, double *__pyx_v_polyy_tab, double *__pyx_v_normx_tab, double *__pyx_v_normy_tab, double __pyx_v_L0, double __pyx_v_L1, __Pyx_memviewslice __pyx_v_kin_tab, __Pyx_memviewslice __pyx_v_kout_tab, __Pyx_memviewslice __pyx_v_vperpout_tab, __Pyx_memviewslice __pyx_v_indout_tab, double __pyx_v_EpsPlane, int __pyx_v_ind_struct, int __pyx_v_ind_lim_struct) {
  int __pyx_v_is_in_path;
  int __pyx_v_ii;
  int __pyx_v_jj;
  double __pyx_v_kin;
  double __pyx_v_kout;
  double __pyx_v_scauVin;
  double __pyx_v_q;
  double __pyx_v_X;
  double __pyx_v_sca;
  int __pyx_v_indin;
  int __pyx_v_indout;
  int __pyx_v_Done;
  PyObject *__pyx_v_k = NULL;
  double __pyx_v_V1;
  double __pyx_v_V2;
  PyObject *__pyx_v_warn = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("raytracing_inout_struct_lin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_XDECREF(__pyx_t_27);
  __Pyx_XDECREF(__pyx_t_32);
  __Pyx_WriteUnraisable("tofu.geom._GG03.raytracing_inout_struct_lin", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
}
 2474:                                              double[:,::1] Ds,
 2475:                                              double [:,::1] us,
 2476:                                              int Ns, # VIn.shape[1]
 2477:                                              double* polyx_tab,
 2478:                                              double* polyy_tab,
 2479:                                              double* normx_tab,
 2480:                                              double* normy_tab,
 2481:                                              double L0, double L1,
 2482:                                              double[::1] kin_tab,
 2483:                                              double[::1] kout_tab,
 2484:                                              double[::1] vperpout_tab,
 2485:                                              int[::1] indout_tab,
 2486:                                              double EpsPlane,
 2487:                                              int ind_struct,
 2488:                                              int ind_lim_struct):
 2489: 
 2490:     cdef bint is_in_path
+2491:     cdef int ii=0, jj=0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 2492:     cdef double kin, kout, scauVin, q, X, sca
+2493:     cdef int indin=0, indout=0, Done=0
  __pyx_v_indin = 0;
  __pyx_v_indout = 0;
  __pyx_v_Done = 0;
 2494: 
+2495:     if ind_struct == 0 and ind_lim_struct == 0 :
  __pyx_t_2 = ((__pyx_v_ind_struct == 0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_ind_lim_struct == 0) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
 2496:             # If it is the first struct,
 2497:             # we have to initialize values even if no impact
+2498:             kin_tab[ii]  = Cnan
    __pyx_t_3 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kin_tab.data) + __pyx_t_3)) )) = NAN;
+2499:             kout_tab[ii] = Cnan
    __pyx_t_4 = __pyx_v_ii;
    *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kout_tab.data) + __pyx_t_4)) )) = NAN;
 2500: 
+2501:     for ii in range(0,Nl):
  __pyx_t_5 = __pyx_v_Nl;
  __pyx_t_6 = __pyx_t_5;
  for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
    __pyx_v_ii = __pyx_t_7;
+2502:         kout, kin, Done = 1.e12, 1e12, 0
    __pyx_t_8 = 1.e12;
    __pyx_t_9 = 1e12;
    __pyx_t_10 = 0;
    __pyx_v_kout = __pyx_t_8;
    __pyx_v_kin = __pyx_t_9;
    __pyx_v_Done = __pyx_t_10;
 2503:         # For cylinder
+2504:         for jj in range(0,Ns):
    __pyx_t_10 = __pyx_v_Ns;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_jj = __pyx_t_12;
+2505:             scauVin = us[1,ii] * normx_tab[jj] + us[2,ii] * normy_tab[jj]
      __pyx_t_13 = 1;
      __pyx_t_14 = __pyx_v_ii;
      __pyx_t_15 = 2;
      __pyx_t_16 = __pyx_v_ii;
      __pyx_v_scauVin = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_13 * __pyx_v_us.strides[0]) )) + __pyx_t_14)) ))) * (__pyx_v_normx_tab[__pyx_v_jj])) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_15 * __pyx_v_us.strides[0]) )) + __pyx_t_16)) ))) * (__pyx_v_normy_tab[__pyx_v_jj])));
 2506:             # Only if plane not parallel to line
+2507:             if Cabs(scauVin)>EpsPlane:
      __pyx_t_1 = ((fabs(__pyx_v_scauVin) > __pyx_v_EpsPlane) != 0);
      if (__pyx_t_1) {
/* … */
      }
    }
+2508:                 k = -( (Ds[1,ii] - polyx_tab[jj]) * normx_tab[jj] +
        __pyx_t_17 = 1;
        __pyx_t_18 = __pyx_v_ii;
+2509:                        (Ds[2,ii] - polyy_tab[jj]) * normy_tab[jj]) \
        __pyx_t_19 = 2;
        __pyx_t_20 = __pyx_v_ii;
+2510:                        / scauVin
        __pyx_t_21 = PyFloat_FromDouble(((-((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_17 * __pyx_v_Ds.strides[0]) )) + __pyx_t_18)) ))) - (__pyx_v_polyx_tab[__pyx_v_jj])) * (__pyx_v_normx_tab[__pyx_v_jj])) + (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_19 * __pyx_v_Ds.strides[0]) )) + __pyx_t_20)) ))) - (__pyx_v_polyy_tab[__pyx_v_jj])) * (__pyx_v_normy_tab[__pyx_v_jj])))) / __pyx_v_scauVin)); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2510, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_21);
        __pyx_t_21 = 0;
 2511:                 # Only if on good side of semi-line
+2512:                 if k>=0.:
        __pyx_t_21 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2512, __pyx_L1_error)
        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2512, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        if (__pyx_t_1) {
/* … */
        }
+2513:                     V1 = polyx_tab[jj+1]-polyx_tab[jj]
          __pyx_v_V1 = ((__pyx_v_polyx_tab[(__pyx_v_jj + 1)]) - (__pyx_v_polyx_tab[__pyx_v_jj]));
+2514:                     V2 = polyy_tab[jj+1]-polyy_tab[jj]
          __pyx_v_V2 = ((__pyx_v_polyy_tab[(__pyx_v_jj + 1)]) - (__pyx_v_polyy_tab[__pyx_v_jj]));
+2515:                     if (V1**2 + V2**2 > _VSMALL):
          __pyx_t_1 = (((pow(__pyx_v_V1, 2.0) + pow(__pyx_v_V2, 2.0)) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L12;
          }
+2516:                         q = (  (Ds[1,ii] + k * us[1,ii] - polyx_tab[jj]) * V1
            __pyx_t_22 = 1;
            __pyx_t_23 = __pyx_v_ii;
            __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_22 * __pyx_v_Ds.strides[0]) )) + __pyx_t_23)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __pyx_t_24 = 1;
            __pyx_t_25 = __pyx_v_ii;
            __pyx_t_26 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_24 * __pyx_v_us.strides[0]) )) + __pyx_t_25)) )))); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_26);
            __pyx_t_27 = PyNumber_Multiply(__pyx_v_k, __pyx_t_26); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __pyx_t_26 = PyNumber_Add(__pyx_t_21, __pyx_t_27); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_26);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
            __pyx_t_27 = PyFloat_FromDouble((__pyx_v_polyx_tab[__pyx_v_jj])); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            __pyx_t_21 = PyNumber_Subtract(__pyx_t_26, __pyx_t_27); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
            __pyx_t_27 = PyFloat_FromDouble(__pyx_v_V1); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            __pyx_t_26 = PyNumber_Multiply(__pyx_t_21, __pyx_t_27); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2516, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_26);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
+2517:                              + (Ds[2,ii] + k * us[2,ii] - polyy_tab[jj]) * V2) \
            __pyx_t_28 = 2;
            __pyx_t_29 = __pyx_v_ii;
            __pyx_t_27 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_28 * __pyx_v_Ds.strides[0]) )) + __pyx_t_29)) )))); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            __pyx_t_30 = 2;
            __pyx_t_31 = __pyx_v_ii;
            __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_30 * __pyx_v_us.strides[0]) )) + __pyx_t_31)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __pyx_t_32 = PyNumber_Multiply(__pyx_v_k, __pyx_t_21); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __pyx_t_21 = PyNumber_Add(__pyx_t_27, __pyx_t_32); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
            __pyx_t_32 = PyFloat_FromDouble((__pyx_v_polyy_tab[__pyx_v_jj])); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __pyx_t_27 = PyNumber_Subtract(__pyx_t_21, __pyx_t_32); if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_27);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
            __pyx_t_32 = PyFloat_FromDouble(__pyx_v_V2); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __pyx_t_21 = PyNumber_Multiply(__pyx_t_27, __pyx_t_32); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_DECREF(__pyx_t_27); __pyx_t_27 = 0;
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
            __pyx_t_32 = PyNumber_Add(__pyx_t_26, __pyx_t_21); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2517, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+2518:                              / (V1*V1 + V2*V2)
            __pyx_t_21 = PyFloat_FromDouble(((__pyx_v_V1 * __pyx_v_V1) + (__pyx_v_V2 * __pyx_v_V2))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2518, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __pyx_t_26 = __Pyx_PyNumber_Divide(__pyx_t_32, __pyx_t_21); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2518, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_26);
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_26); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2518, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
            __pyx_v_q = __pyx_t_9;
 2519:                         # Only of on the fraction of plane
+2520:                         if q>=0. and q<1.:
            __pyx_t_2 = ((__pyx_v_q >= 0.) != 0);
            if (__pyx_t_2) {
            } else {
              __pyx_t_1 = __pyx_t_2;
              goto __pyx_L14_bool_binop_done;
            }
            __pyx_t_2 = ((__pyx_v_q < 1.) != 0);
            __pyx_t_1 = __pyx_t_2;
            __pyx_L14_bool_binop_done:;
            if (__pyx_t_1) {
/* … */
            }
+2521:                             X = Ds[0,ii] + k*us[0,ii]
              __pyx_t_33 = 0;
              __pyx_t_34 = __pyx_v_ii;
              __pyx_t_26 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_33 * __pyx_v_Ds.strides[0]) )) + __pyx_t_34)) )))); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2521, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_26);
              __pyx_t_35 = 0;
              __pyx_t_36 = __pyx_v_ii;
              __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_35 * __pyx_v_us.strides[0]) )) + __pyx_t_36)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2521, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_21);
              __pyx_t_32 = PyNumber_Multiply(__pyx_v_k, __pyx_t_21); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2521, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_32);
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              __pyx_t_21 = PyNumber_Add(__pyx_t_26, __pyx_t_32); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2521, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_21);
              __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
              __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
              __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_21); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2521, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
              __pyx_v_X = __pyx_t_9;
 2522:                             # Only if within limits
+2523:                             if X>=L0 and X<=L1:
              __pyx_t_2 = ((__pyx_v_X >= __pyx_v_L0) != 0);
              if (__pyx_t_2) {
              } else {
                __pyx_t_1 = __pyx_t_2;
                goto __pyx_L17_bool_binop_done;
              }
              __pyx_t_2 = ((__pyx_v_X <= __pyx_v_L1) != 0);
              __pyx_t_1 = __pyx_t_2;
              __pyx_L17_bool_binop_done:;
              if (__pyx_t_1) {
/* … */
              }
+2524:                                 sca = us[1,ii] * normx_tab[jj] \
                __pyx_t_37 = 1;
                __pyx_t_38 = __pyx_v_ii;
+2525:                                       + us[2,ii] * normy_tab[jj]
                __pyx_t_39 = 2;
                __pyx_t_40 = __pyx_v_ii;
                __pyx_v_sca = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_37 * __pyx_v_us.strides[0]) )) + __pyx_t_38)) ))) * (__pyx_v_normx_tab[__pyx_v_jj])) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_39 * __pyx_v_us.strides[0]) )) + __pyx_t_40)) ))) * (__pyx_v_normy_tab[__pyx_v_jj])));
 2526:                                 # Only if new
+2527:                                 if sca<=0 and k<kout:
                __pyx_t_2 = ((__pyx_v_sca <= 0.0) != 0);
                if (__pyx_t_2) {
                } else {
                  __pyx_t_1 = __pyx_t_2;
                  goto __pyx_L20_bool_binop_done;
                }
                __pyx_t_21 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2527, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_21);
                __pyx_t_32 = PyObject_RichCompare(__pyx_v_k, __pyx_t_21, Py_LT); __Pyx_XGOTREF(__pyx_t_32); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2527, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_32); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2527, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
                __pyx_t_1 = __pyx_t_2;
                __pyx_L20_bool_binop_done:;
                if (__pyx_t_1) {
/* … */
                  goto __pyx_L19;
                }
+2528:                                     kout = k
                  __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2528, __pyx_L1_error)
                  __pyx_v_kout = __pyx_t_9;
+2529:                                     indout = jj
                  __pyx_v_indout = __pyx_v_jj;
+2530:                                     Done = 1
                  __pyx_v_Done = 1;
+2531:                                 elif sca>=0 and k<min(kin,kout):
                __pyx_t_2 = ((__pyx_v_sca >= 0.0) != 0);
                if (__pyx_t_2) {
                } else {
                  __pyx_t_1 = __pyx_t_2;
                  goto __pyx_L22_bool_binop_done;
                }
                __pyx_t_9 = __pyx_v_kout;
                __pyx_t_8 = __pyx_v_kin;
                if (((__pyx_t_9 < __pyx_t_8) != 0)) {
                  __pyx_t_41 = __pyx_t_9;
                } else {
                  __pyx_t_41 = __pyx_t_8;
                }
                __pyx_t_32 = PyFloat_FromDouble(__pyx_t_41); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2531, __pyx_L1_error)
                __Pyx_GOTREF(__pyx_t_32);
                __pyx_t_21 = PyObject_RichCompare(__pyx_v_k, __pyx_t_32, Py_LT); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2531, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
                __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2531, __pyx_L1_error)
                __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
                __pyx_t_1 = __pyx_t_2;
                __pyx_L22_bool_binop_done:;
                if (__pyx_t_1) {
/* … */
                }
                __pyx_L19:;
+2532:                                     kin = k
                  __pyx_t_41 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_41 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2532, __pyx_L1_error)
                  __pyx_v_kin = __pyx_t_41;
+2533:                                     indin = jj
                  __pyx_v_indin = __pyx_v_jj;
 2534:                     else:
+2535:                         from warnings import warn
          /*else*/ {
            __pyx_t_21 = PyList_New(1); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2535, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_INCREF(__pyx_n_s_warn);
            __Pyx_GIVEREF(__pyx_n_s_warn);
            PyList_SET_ITEM(__pyx_t_21, 0, __pyx_n_s_warn);
            __pyx_t_32 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_21, -1); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2535, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __pyx_t_21 = __Pyx_ImportFrom(__pyx_t_32, __pyx_n_s_warn); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2535, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_21);
            __Pyx_INCREF(__pyx_t_21);
            __Pyx_XDECREF_SET(__pyx_v_warn, __pyx_t_21);
            __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
+2536:                         warn("The polygon has double identical points",
            __pyx_t_32 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2536, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_32);
            __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          }
          __pyx_L12:;
/* … */
  __pyx_tuple__72 = PyTuple_Pack(2, __pyx_kp_s_The_polygon_has_double_identical, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 2536, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__72);
  __Pyx_GIVEREF(__pyx_tuple__72);
 2537:                              Warning)
 2538:         # For two faces
 2539:         # Only if plane not parallel to line
+2540:         if Cabs(us[0,ii])>EpsPlane:
    __pyx_t_42 = 0;
    __pyx_t_43 = __pyx_v_ii;
    __pyx_t_1 = ((fabs((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_42 * __pyx_v_us.strides[0]) )) + __pyx_t_43)) )))) > __pyx_v_EpsPlane) != 0);
    if (__pyx_t_1) {
/* … */
    }
 2541:             # First face
+2542:             k = -(Ds[0,ii]-L0)/us[0,ii]
      __pyx_t_44 = 0;
      __pyx_t_45 = __pyx_v_ii;
      __pyx_t_46 = 0;
      __pyx_t_47 = __pyx_v_ii;
      __pyx_t_32 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_44 * __pyx_v_Ds.strides[0]) )) + __pyx_t_45)) ))) - __pyx_v_L0)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_46 * __pyx_v_us.strides[0]) )) + __pyx_t_47)) ))))); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2542, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_32);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_32);
      __pyx_t_32 = 0;
 2543:             # Only if on good side of semi-line
+2544:             if k>=0.:
      __pyx_t_32 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_32); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2544, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_32); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2544, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
      if (__pyx_t_1) {
/* … */
      }
 2545:                 # Only if inside VPoly
+2546:                 is_in_path = is_point_in_path(Ns, polyx_tab, polyy_tab,
        __pyx_v_is_in_path = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_Ns, __pyx_v_polyx_tab, __pyx_v_polyy_tab, __pyx_t_41, __pyx_t_9);
+2547:                                               Ds[1,ii]+k*us[1,ii],
        __pyx_t_48 = 1;
        __pyx_t_49 = __pyx_v_ii;
        __pyx_t_32 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_48 * __pyx_v_Ds.strides[0]) )) + __pyx_t_49)) )))); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2547, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_32);
        __pyx_t_50 = 1;
        __pyx_t_51 = __pyx_v_ii;
        __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_50 * __pyx_v_us.strides[0]) )) + __pyx_t_51)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2547, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __pyx_t_26 = PyNumber_Multiply(__pyx_v_k, __pyx_t_21); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2547, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __pyx_t_21 = PyNumber_Add(__pyx_t_32, __pyx_t_26); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2547, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_41 = __pyx_PyFloat_AsDouble(__pyx_t_21); if (unlikely((__pyx_t_41 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2547, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+2548:                                               Ds[2,ii]+k*us[2,ii])
        __pyx_t_52 = 2;
        __pyx_t_53 = __pyx_v_ii;
        __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_52 * __pyx_v_Ds.strides[0]) )) + __pyx_t_53)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2548, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __pyx_t_54 = 2;
        __pyx_t_55 = __pyx_v_ii;
        __pyx_t_26 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_54 * __pyx_v_us.strides[0]) )) + __pyx_t_55)) )))); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2548, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __pyx_t_32 = PyNumber_Multiply(__pyx_v_k, __pyx_t_26); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2548, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_32);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_26 = PyNumber_Add(__pyx_t_21, __pyx_t_32); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2548, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
        __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_26); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2548, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
+2549:                 if is_in_path:
        __pyx_t_1 = (__pyx_v_is_in_path != 0);
        if (__pyx_t_1) {
/* … */
        }
+2550:                     if us[0,ii]<=0 and k<kout:
          __pyx_t_56 = 0;
          __pyx_t_57 = __pyx_v_ii;
          __pyx_t_2 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_56 * __pyx_v_us.strides[0]) )) + __pyx_t_57)) ))) <= 0.0) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_1 = __pyx_t_2;
            goto __pyx_L28_bool_binop_done;
          }
          __pyx_t_26 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2550, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_32 = PyObject_RichCompare(__pyx_v_k, __pyx_t_26, Py_LT); __Pyx_XGOTREF(__pyx_t_32); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2550, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_32); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2550, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          __pyx_t_1 = __pyx_t_2;
          __pyx_L28_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L27;
          }
+2551:                         kout = k
            __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2551, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_9;
+2552:                         indout = -1
            __pyx_v_indout = -1;
+2553:                         Done = 1
            __pyx_v_Done = 1;
+2554:                     elif us[0,ii]>=0 and k<min(kin,kout):
          __pyx_t_58 = 0;
          __pyx_t_59 = __pyx_v_ii;
          __pyx_t_2 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_58 * __pyx_v_us.strides[0]) )) + __pyx_t_59)) ))) >= 0.0) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_1 = __pyx_t_2;
            goto __pyx_L30_bool_binop_done;
          }
          __pyx_t_9 = __pyx_v_kout;
          __pyx_t_41 = __pyx_v_kin;
          if (((__pyx_t_9 < __pyx_t_41) != 0)) {
            __pyx_t_8 = __pyx_t_9;
          } else {
            __pyx_t_8 = __pyx_t_41;
          }
          __pyx_t_32 = PyFloat_FromDouble(__pyx_t_8); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_32);
          __pyx_t_26 = PyObject_RichCompare(__pyx_v_k, __pyx_t_32, Py_LT); __Pyx_XGOTREF(__pyx_t_26); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2554, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_26); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2554, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_1 = __pyx_t_2;
          __pyx_L30_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
          }
          __pyx_L27:;
+2555:                         kin = k
            __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2555, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_8;
+2556:                         indin = -1
            __pyx_v_indin = -1;
 2557:             # Second face
+2558:             k = -(Ds[0,ii]-L1)/us[0,ii]
      __pyx_t_60 = 0;
      __pyx_t_61 = __pyx_v_ii;
      __pyx_t_62 = 0;
      __pyx_t_63 = __pyx_v_ii;
      __pyx_t_26 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_60 * __pyx_v_Ds.strides[0]) )) + __pyx_t_61)) ))) - __pyx_v_L1)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_62 * __pyx_v_us.strides[0]) )) + __pyx_t_63)) ))))); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2558, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_26);
      __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_26);
      __pyx_t_26 = 0;
 2559:             # Only if on good side of semi-line
+2560:             if k>=0.:
      __pyx_t_26 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_26); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2560, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_26); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 2560, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
      if (__pyx_t_1) {
/* … */
      }
 2561:                 # Only if inside VPoly
+2562:                 is_in_path = is_point_in_path(Ns, polyx_tab, polyy_tab,
        __pyx_v_is_in_path = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_Ns, __pyx_v_polyx_tab, __pyx_v_polyy_tab, __pyx_t_8, __pyx_t_9);
+2563:                                               Ds[1,ii]+k*us[1,ii],
        __pyx_t_64 = 1;
        __pyx_t_65 = __pyx_v_ii;
        __pyx_t_26 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_64 * __pyx_v_Ds.strides[0]) )) + __pyx_t_65)) )))); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __pyx_t_66 = 1;
        __pyx_t_67 = __pyx_v_ii;
        __pyx_t_32 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_66 * __pyx_v_us.strides[0]) )) + __pyx_t_67)) )))); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_32);
        __pyx_t_21 = PyNumber_Multiply(__pyx_v_k, __pyx_t_32); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
        __pyx_t_32 = PyNumber_Add(__pyx_t_26, __pyx_t_21); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2563, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_32);
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_32); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2563, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
+2564:                                               Ds[2,ii]+k*us[2,ii])
        __pyx_t_68 = 2;
        __pyx_t_69 = __pyx_v_ii;
        __pyx_t_32 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_68 * __pyx_v_Ds.strides[0]) )) + __pyx_t_69)) )))); if (unlikely(!__pyx_t_32)) __PYX_ERR(0, 2564, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_32);
        __pyx_t_70 = 2;
        __pyx_t_71 = __pyx_v_ii;
        __pyx_t_21 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_70 * __pyx_v_us.strides[0]) )) + __pyx_t_71)) )))); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2564, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __pyx_t_26 = PyNumber_Multiply(__pyx_v_k, __pyx_t_21); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2564, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_26);
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __pyx_t_21 = PyNumber_Add(__pyx_t_32, __pyx_t_26); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2564, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_21);
        __Pyx_DECREF(__pyx_t_32); __pyx_t_32 = 0;
        __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
        __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_21); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2564, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
+2565:                 if is_in_path:
        __pyx_t_1 = (__pyx_v_is_in_path != 0);
        if (__pyx_t_1) {
/* … */
        }
+2566:                     if us[0,ii]>=0 and k<kout:
          __pyx_t_72 = 0;
          __pyx_t_73 = __pyx_v_ii;
          __pyx_t_2 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_72 * __pyx_v_us.strides[0]) )) + __pyx_t_73)) ))) >= 0.0) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_1 = __pyx_t_2;
            goto __pyx_L35_bool_binop_done;
          }
          __pyx_t_21 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2566, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_21);
          __pyx_t_26 = PyObject_RichCompare(__pyx_v_k, __pyx_t_21, Py_LT); __Pyx_XGOTREF(__pyx_t_26); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2566, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_26); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2566, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_1 = __pyx_t_2;
          __pyx_L35_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
            goto __pyx_L34;
          }
+2567:                         kout = k
            __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2567, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_9;
+2568:                         indout = -2
            __pyx_v_indout = -2;
+2569:                         Done = 1
            __pyx_v_Done = 1;
+2570:                     elif us[0,ii]<=0 and k<min(kin,kout):
          __pyx_t_74 = 0;
          __pyx_t_75 = __pyx_v_ii;
          __pyx_t_2 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_74 * __pyx_v_us.strides[0]) )) + __pyx_t_75)) ))) <= 0.0) != 0);
          if (__pyx_t_2) {
          } else {
            __pyx_t_1 = __pyx_t_2;
            goto __pyx_L37_bool_binop_done;
          }
          __pyx_t_9 = __pyx_v_kout;
          __pyx_t_8 = __pyx_v_kin;
          if (((__pyx_t_9 < __pyx_t_8) != 0)) {
            __pyx_t_41 = __pyx_t_9;
          } else {
            __pyx_t_41 = __pyx_t_8;
          }
          __pyx_t_26 = PyFloat_FromDouble(__pyx_t_41); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 2570, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_26);
          __pyx_t_21 = PyObject_RichCompare(__pyx_v_k, __pyx_t_26, Py_LT); __Pyx_XGOTREF(__pyx_t_21); if (unlikely(!__pyx_t_21)) __PYX_ERR(0, 2570, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_21); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 2570, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
          __pyx_t_1 = __pyx_t_2;
          __pyx_L37_bool_binop_done:;
          if (__pyx_t_1) {
/* … */
          }
          __pyx_L34:;
+2571:                         kin = k
            __pyx_t_41 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_41 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2571, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_41;
+2572:                         indin = -2
            __pyx_v_indin = -2;
 2573:         # == Analyzing if there was impact ====================================
+2574:         if Done==1:
    __pyx_t_1 = ((__pyx_v_Done == 1) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
+2575:             if (ind_struct == 0 and ind_lim_struct == 0):
      __pyx_t_2 = ((__pyx_v_ind_struct == 0) != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L41_bool_binop_done;
      }
      __pyx_t_2 = ((__pyx_v_ind_lim_struct == 0) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L41_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
        goto __pyx_L40;
      }
+2576:                 kout_tab[ii] = kout
        __pyx_t_76 = __pyx_v_ii;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kout_tab.data) + __pyx_t_76)) )) = __pyx_v_kout;
+2577:                 if kin < kout:
        __pyx_t_1 = ((__pyx_v_kin < __pyx_v_kout) != 0);
        if (__pyx_t_1) {
/* … */
        }
+2578:                     kin_tab[ii] = kin
          __pyx_t_77 = __pyx_v_ii;
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kin_tab.data) + __pyx_t_77)) )) = __pyx_v_kin;
 2579:                 # To be finished
+2580:                 if indout==-1:
        switch (__pyx_v_indout) {
          case -1L:
/* … */
          break;
          case -2L:
+2581:                     vperpout_tab[0 + 3 * ii] = 1.
          __pyx_t_78 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_78)) )) = 1.;
+2582:                     vperpout_tab[1 + 3 * ii] = 0.
          __pyx_t_79 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_79)) )) = 0.;
+2583:                     vperpout_tab[2 + 3 * ii] = 0.
          __pyx_t_80 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_80)) )) = 0.;
+2584:                 elif indout==-2:
          break;
          default:
+2585:                     vperpout_tab[0 + 3 * ii] = -1.
          __pyx_t_81 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_81)) )) = -1.;
+2586:                     vperpout_tab[1 + 3 * ii] = 0.
          __pyx_t_82 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_82)) )) = 0.;
+2587:                     vperpout_tab[2 + 3 * ii] = 0.
          __pyx_t_83 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_83)) )) = 0.;
 2588:                 else:
+2589:                     vperpout_tab[0 + 3 * ii] = 0.
          __pyx_t_84 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_84)) )) = 0.;
+2590:                     vperpout_tab[1 + 3 * ii] = normx_tab[indout]
          __pyx_t_85 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_85)) )) = (__pyx_v_normx_tab[__pyx_v_indout]);
+2591:                     vperpout_tab[2 + 3 * ii] = normy_tab[indout]
          __pyx_t_86 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_86)) )) = (__pyx_v_normy_tab[__pyx_v_indout]);
          break;
        }
+2592:                 indout_tab[0 + 3 * ii] = 0
        __pyx_t_87 = (0 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_87)) )) = 0;
+2593:                 indout_tab[1 + 3 * ii] = 0
        __pyx_t_88 = (1 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_88)) )) = 0;
+2594:                 indout_tab[2 + 3 * ii] = indout
        __pyx_t_89 = (2 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_89)) )) = __pyx_v_indout;
+2595:             elif kin<kout_tab[ii] and kin < kout:
      __pyx_t_90 = __pyx_v_ii;
      __pyx_t_2 = ((__pyx_v_kin < (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kout_tab.data) + __pyx_t_90)) )))) != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L44_bool_binop_done;
      }
      __pyx_t_2 = ((__pyx_v_kin < __pyx_v_kout) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L44_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
      __pyx_L40:;
+2596:                 kout_tab[ii] = kin
        __pyx_t_91 = __pyx_v_ii;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kout_tab.data) + __pyx_t_91)) )) = __pyx_v_kin;
+2597:                 indout_tab[0 + 3 * ii] = ind_struct
        __pyx_t_92 = (0 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_92)) )) = __pyx_v_ind_struct;
+2598:                 indout_tab[1 + 3 * ii] = ind_lim_struct
        __pyx_t_93 = (1 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_93)) )) = __pyx_v_ind_lim_struct;
+2599:                 indout_tab[2 + 3 * ii] = indin
        __pyx_t_94 = (2 + (3 * __pyx_v_ii));
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_indout_tab.data) + __pyx_t_94)) )) = __pyx_v_indin;
+2600:                 if indout==-1:
        switch (__pyx_v_indout) {
          case -1L:
/* … */
          break;
          case -2L:
+2601:                     vperpout_tab[0 + 3 * ii] = 1.
          __pyx_t_95 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_95)) )) = 1.;
+2602:                     vperpout_tab[1 + 3 * ii] = 0.
          __pyx_t_96 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_96)) )) = 0.;
+2603:                     vperpout_tab[2 + 3 * ii] = 0.
          __pyx_t_97 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_97)) )) = 0.;
+2604:                 elif indout==-2:
          break;
          default:
+2605:                     vperpout_tab[0 + 3 * ii] = -1.
          __pyx_t_98 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_98)) )) = -1.;
+2606:                     vperpout_tab[1 + 3 * ii] = 0.
          __pyx_t_99 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_99)) )) = 0.;
+2607:                     vperpout_tab[2 + 3 * ii] = 0.
          __pyx_t_100 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_100)) )) = 0.;
 2608:                 else:
+2609:                     vperpout_tab[0 + 3 * ii] = 0.
          __pyx_t_101 = (0 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_101)) )) = 0.;
+2610:                     vperpout_tab[1 + 3 * ii] = normx_tab[indout]
          __pyx_t_102 = (1 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_102)) )) = (__pyx_v_normx_tab[__pyx_v_indout]);
+2611:                     vperpout_tab[2 + 3 * ii] = normy_tab[indout]
          __pyx_t_103 = (2 + (3 * __pyx_v_ii));
          *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_vperpout_tab.data) + __pyx_t_103)) )) = (__pyx_v_normy_tab[__pyx_v_indout]);
          break;
        }
+2612:     return
  goto __pyx_L0;
 2613: 
 2614: 
 2615: # =============================================================================
 2616: # = Ray tracing when we only want kMin / kMax
 2617: # -   (useful when working with flux surfaces)
 2618: # =============================================================================
+2619: def LOS_Calc_kMinkMax_VesStruct(double[:, ::1] ray_orig,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_47LOS_Calc_kMinkMax_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_46LOS_Calc_kMinkMax_VesStruct[] = "\n    Computes the entry and exit point of all provided LOS for the provided\n    polygons (toroidal or linear)  of IN structures (non-solid, or `empty`\n    inside for the LOS).\n    Attention: the surfaces can be limited, but they all have to have the\n    same limits defined by (ves_lims)\n    Return the set of kmin / kmax for each In struct and for each LOS\n\n    Params\n    ======\n    ray_orig : (3, num_los) double array\n       LOS origin points coordinates\n    ray_vdir : (3, num_los) double array\n       LOS normalized direction vector\n    num_surf : int\n       number of surfaxes, aka 'in' structures or 'vessels'\n    ves_poly : (num_surf, 2, num_vertex) double array\n       Coordinates of the vertices of the Polygon defining the 2D poloidal\n       cut of the `in` structures\n    ves_norm : (num_surf, 2, num_vertex-1) double array\n       Normal vectors going \"inwards\" of the edges of the Polygon defined\n       by ves_poly\n    ves_lims : array\n       Contains the limits min and max of vessel\n    rmin : double\n       Minimal radius of vessel to take into consideration\n    eps<val> : double\n       Small value, acceptance of error\n    vtype : string\n       Type of vessel (\"Tor\" or \"Lin\")\n    forbid : bool\n       Should we forbid values behind vissible radius ? (see rmin)\n    test : bool\n       Should we run tests ?\n    num_threads : int\n       The num_threads argument indicates how many threads the team should\n       consist of. If not given, OpenMP will decide how many threads to use.\n       Typically this is the number of cores available on the machine.\n    Return\n    ======\n    coeff_inter_in : (num_surf, num_los) array\n       scalars level of \"in\" intersection of the LOS (if k=0 at origin) for\n       each surface\n       [kmin(surf0, los0), kmin(surf0, los1), ..., kmin(surf1, los0),....]\n    coeff_inter_out : (num_surf, num_los) array\n       scalars level of \"out\" intersection of the LOS (if k=0 at origin) for\n       ""each surface\n       [kmax(surf0, los0), kmax(surf0, los1), ..., kmax(surf1, los0),....]\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_47LOS_Calc_kMinkMax_VesStruct = {"LOS_Calc_kMinkMax_VesStruct", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_47LOS_Calc_kMinkMax_VesStruct, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_46LOS_Calc_kMinkMax_VesStruct};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_47LOS_Calc_kMinkMax_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_ray_orig = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ray_vdir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_poly = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_norm = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_v_num_surf;
  __Pyx_memviewslice __pyx_v_ves_lims = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_lnvert = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_rmin;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  int __pyx_v_forbid;
  int __pyx_v_test;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_Calc_kMinkMax_VesStruct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_ves_norm,&__pyx_n_s_num_surf,&__pyx_n_s_ves_lims,&__pyx_n_s_lnvert,&__pyx_n_s_rmin,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_forbid,&__pyx_n_s_test,&__pyx_n_s_num_threads,0};
    PyObject* values[17] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[13] = ((PyObject*)__pyx_n_s_Tor);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_kMinkMax_VesStruct", 0, 5, 17, 1); __PYX_ERR(0, 2619, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_kMinkMax_VesStruct", 0, 5, 17, 2); __PYX_ERR(0, 2619, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_norm)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_kMinkMax_VesStruct", 0, 5, 17, 3); __PYX_ERR(0, 2619, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_surf)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_Calc_kMinkMax_VesStruct", 0, 5, 17, 4); __PYX_ERR(0, 2619, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_lims);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lnvert);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rmin);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_forbid);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_test);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[16] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_Calc_kMinkMax_VesStruct") < 0)) __PYX_ERR(0, 2619, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ray_orig = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_orig.memview)) __PYX_ERR(0, 2619, __pyx_L3_error)
    __pyx_v_ray_vdir = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_vdir.memview)) __PYX_ERR(0, 2620, __pyx_L3_error)
    __pyx_v_ves_poly = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_poly.memview)) __PYX_ERR(0, 2621, __pyx_L3_error)
    __pyx_v_ves_norm = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_norm.memview)) __PYX_ERR(0, 2622, __pyx_L3_error)
    __pyx_v_num_surf = __Pyx_PyInt_As_int(values[4]); if (unlikely((__pyx_v_num_surf == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2623, __pyx_L3_error)
    if (values[5]) {
      __pyx_v_ves_lims = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_lims.memview)) __PYX_ERR(0, 2624, __pyx_L3_error)
    } else {
      __pyx_v_ves_lims = __pyx_k__73;
      __PYX_INC_MEMVIEW(&__pyx_v_ves_lims, 1);
    }
    if (values[6]) {
      __pyx_v_lnvert = __Pyx_PyObject_to_MemoryviewSlice_dc_long(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_lnvert.memview)) __PYX_ERR(0, 2625, __pyx_L3_error)
    } else {
      __pyx_v_lnvert = __pyx_k__74;
      __PYX_INC_MEMVIEW(&__pyx_v_lnvert, 1);
    }
    if (values[7]) {
      __pyx_v_rmin = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_rmin == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2626, __pyx_L3_error)
    } else {
      __pyx_v_rmin = ((double)-1.0);
    }
    if (values[8]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2627, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__75;
    }
    if (values[9]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2627, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__76;
    }
    if (values[10]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2628, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__77;
    }
    if (values[11]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[11]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2628, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__78;
    }
    if (values[12]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[12]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2629, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__79;
    }
    __pyx_v_ves_type = ((PyObject*)values[13]);
    if (values[14]) {
      __pyx_v_forbid = __Pyx_PyObject_IsTrue(values[14]); if (unlikely((__pyx_v_forbid == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2630, __pyx_L3_error)
    } else {
      __pyx_v_forbid = ((int)1);
    }
    if (values[15]) {
      __pyx_v_test = __Pyx_PyObject_IsTrue(values[15]); if (unlikely((__pyx_v_test == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2630, __pyx_L3_error)
    } else {
      __pyx_v_test = ((int)1);
    }
    if (values[16]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[16]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2630, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_Calc_kMinkMax_VesStruct", 0, 5, 17, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 2619, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_Calc_kMinkMax_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 2629, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_46LOS_Calc_kMinkMax_VesStruct(__pyx_self, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_ves_norm, __pyx_v_num_surf, __pyx_v_ves_lims, __pyx_v_lnvert, __pyx_v_rmin, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_forbid, __pyx_v_test, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_46LOS_Calc_kMinkMax_VesStruct(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_ray_orig, __Pyx_memviewslice __pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, __Pyx_memviewslice __pyx_v_ves_norm, int __pyx_v_num_surf, __Pyx_memviewslice __pyx_v_ves_lims, __Pyx_memviewslice __pyx_v_lnvert, double __pyx_v_rmin, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, int __pyx_v_forbid, int __pyx_v_test, int __pyx_v_num_threads) {
  int __pyx_v_npts_poly;
  int __pyx_v_num_los;
  CYTHON_UNUSED int __pyx_v_ind_struct;
  int __pyx_v_ind_surf;
  double __pyx_v_Crit2_base;
  CYTHON_UNUSED double __pyx_v_lim_min;
  CYTHON_UNUSED double __pyx_v_lim_max;
  double __pyx_v_rmin2;
  PyObject *__pyx_v_error_message = 0;
  int __pyx_v_forbidbis;
  int __pyx_v_forbid0;
  arrayobject *__pyx_v_coeff_inter_in = 0;
  arrayobject *__pyx_v_coeff_inter_out = 0;
  CYTHON_UNUSED int *__pyx_v_llimits;
  CYTHON_UNUSED long *__pyx_v_lsz_lim;
  int __pyx_v_are_limited;
  double __pyx_v_lbounds_ves[2];
  PyObject *__pyx_v_ee = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_Calc_kMinkMax_VesStruct", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_Calc_kMinkMax_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_error_message);
  __Pyx_XDECREF((PyObject *)__pyx_v_coeff_inter_in);
  __Pyx_XDECREF((PyObject *)__pyx_v_coeff_inter_out);
  __Pyx_XDECREF(__pyx_v_ee);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_orig, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_vdir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_poly, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_norm, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_lims, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_lnvert, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__204 = PyTuple_Pack(40, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_ves_norm, __pyx_n_s_num_surf, __pyx_n_s_ves_lims, __pyx_n_s_lnvert, __pyx_n_s_rmin, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_forbid, __pyx_n_s_test, __pyx_n_s_num_threads, __pyx_n_s_npts_poly, __pyx_n_s_num_los, __pyx_n_s_ind_struct, __pyx_n_s_ind_surf, __pyx_n_s_len_lim, __pyx_n_s_ind_min, __pyx_n_s_Crit2_base, __pyx_n_s_lim_min, __pyx_n_s_lim_max, __pyx_n_s_rmin2, __pyx_n_s_error_message, __pyx_n_s_forbidbis, __pyx_n_s_forbid0, __pyx_n_s_bool1, __pyx_n_s_bool2, __pyx_n_s_coeff_inter_in, __pyx_n_s_coeff_inter_out, __pyx_n_s_llimits, __pyx_n_s_lsz_lim, __pyx_n_s_are_limited, __pyx_n_s_lbounds_ves, __pyx_n_s_lim_ves, __pyx_n_s_ee); if (unlikely(!__pyx_tuple__204)) __PYX_ERR(0, 2619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__204);
  __Pyx_GIVEREF(__pyx_tuple__204);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_47LOS_Calc_kMinkMax_VesStruct, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_Calc_kMinkMax_VesStruct, __pyx_t_1) < 0) __PYX_ERR(0, 2619, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__205 = (PyObject*)__Pyx_PyCode_New(17, 0, 40, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__204, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_Calc_kMinkMax_VesStruct, 2619, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__205)) __PYX_ERR(0, 2619, __pyx_L1_error)
 2620:                                 double[:, ::1] ray_vdir,
 2621:                                 double[:, :, ::1] ves_poly,
 2622:                                 double[:, :, ::1] ves_norm,
 2623:                                 int num_surf,
+2624:                                 double[::1] ves_lims=None,
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 2624, __pyx_L1_error)
  __pyx_k__73 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
+2625:                                 long[::1] lnvert=None,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_long(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 2625, __pyx_L1_error)
  __pyx_k__74 = __pyx_t_4;
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 2626:                                 double rmin=-1,
+2627:                                 double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__75 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__76 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+2628:                                 double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__77 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__78 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+2629:                                 double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__79 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 2630:                                 bint forbid=1, bint test=1, int num_threads=16):
 2631:     """
 2632:     Computes the entry and exit point of all provided LOS for the provided
 2633:     polygons (toroidal or linear)  of IN structures (non-solid, or `empty`
 2634:     inside for the LOS).
 2635:     Attention: the surfaces can be limited, but they all have to have the
 2636:     same limits defined by (ves_lims)
 2637:     Return the set of kmin / kmax for each In struct and for each LOS
 2638: 
 2639:     Params
 2640:     ======
 2641:     ray_orig : (3, num_los) double array
 2642:        LOS origin points coordinates
 2643:     ray_vdir : (3, num_los) double array
 2644:        LOS normalized direction vector
 2645:     num_surf : int
 2646:        number of surfaxes, aka 'in' structures or 'vessels'
 2647:     ves_poly : (num_surf, 2, num_vertex) double array
 2648:        Coordinates of the vertices of the Polygon defining the 2D poloidal
 2649:        cut of the `in` structures
 2650:     ves_norm : (num_surf, 2, num_vertex-1) double array
 2651:        Normal vectors going "inwards" of the edges of the Polygon defined
 2652:        by ves_poly
 2653:     ves_lims : array
 2654:        Contains the limits min and max of vessel
 2655:     rmin : double
 2656:        Minimal radius of vessel to take into consideration
 2657:     eps<val> : double
 2658:        Small value, acceptance of error
 2659:     vtype : string
 2660:        Type of vessel ("Tor" or "Lin")
 2661:     forbid : bool
 2662:        Should we forbid values behind vissible radius ? (see rmin)
 2663:     test : bool
 2664:        Should we run tests ?
 2665:     num_threads : int
 2666:        The num_threads argument indicates how many threads the team should
 2667:        consist of. If not given, OpenMP will decide how many threads to use.
 2668:        Typically this is the number of cores available on the machine.
 2669:     Return
 2670:     ======
 2671:     coeff_inter_in : (num_surf, num_los) array
 2672:        scalars level of "in" intersection of the LOS (if k=0 at origin) for
 2673:        each surface
 2674:        [kmin(surf0, los0), kmin(surf0, los1), ..., kmin(surf1, los0),....]
 2675:     coeff_inter_out : (num_surf, num_los) array
 2676:        scalars level of "out" intersection of the LOS (if k=0 at origin) for
 2677:        each surface
 2678:        [kmax(surf0, los0), kmax(surf0, los1), ..., kmax(surf1, los0),....]
 2679:     """
 2680:     cdef int npts_poly
+2681:     cdef int num_los = ray_orig.shape[1]
  __pyx_v_num_los = (__pyx_v_ray_orig.shape[1]);
+2682:     cdef int ind_struct = 0
  __pyx_v_ind_struct = 0;
 2683:     cdef int ind_surf
 2684:     cdef int len_lim
 2685:     cdef int ind_min
+2686:     cdef double Crit2_base = eps_uz * eps_uz /400.
  __pyx_v_Crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
+2687:     cdef double lim_min = 0.
  __pyx_v_lim_min = 0.;
+2688:     cdef double lim_max = 0.
  __pyx_v_lim_max = 0.;
+2689:     cdef double rmin2 = 0.
  __pyx_v_rmin2 = 0.;
 2690:     cdef str error_message
 2691:     cdef bint forbidbis, forbid0
 2692:     cdef bint bool1, bool2
+2693:     cdef array coeff_inter_in  = clone(array('d'), num_los * num_surf, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), (__pyx_v_num_los * __pyx_v_num_surf), 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_coeff_inter_in = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+2694:     cdef array coeff_inter_out = clone(array('d'), num_los * num_surf, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_num_los * __pyx_v_num_surf), 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2694, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_coeff_inter_out = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
+2695:     cdef int *llimits = NULL
  __pyx_v_llimits = NULL;
+2696:     cdef long *lsz_lim = NULL
  __pyx_v_lsz_lim = NULL;
 2697:     cdef bint are_limited
 2698:     cdef double[2] lbounds_ves
 2699:     cdef double[2] lim_ves
 2700: 
 2701:     # == Testing inputs ========================================================
+2702:     if test:
  __pyx_t_3 = (__pyx_v_test != 0);
  if (__pyx_t_3) {
/* … */
  }
 2703:         error_message = "ray_orig and ray_vdir must have the same shape: "\
+2704:                         + "(3,) or (3,NL)!"
    __pyx_t_1 = PyNumber_Add(__pyx_kp_s_ray_orig_and_ray_vdir_must_have, __pyx_kp_s_3_or_3_NL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2704, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_error_message = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+2705:         assert tuple(ray_orig.shape) == tuple(ray_vdir.shape) and \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_ray_orig.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_carray_to_py_Py_ssize_t(__pyx_v_ray_vdir.shape, 8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2705, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }
+2706:           ray_orig.shape[0] == 3, error_message
      __pyx_t_5 = (((__pyx_v_ray_orig.shape[0]) == 3) != 0);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 2705, __pyx_L1_error)
      }
    }
    #endif
+2707:         error_message = "[eps_uz,eps_vz,eps_a,eps_b] must be floats < 1.e-4!"
    __Pyx_INCREF(__pyx_kp_s_eps_uz_eps_vz_eps_a_eps_b_must);
    __Pyx_DECREF_SET(__pyx_v_error_message, __pyx_kp_s_eps_uz_eps_vz_eps_a_eps_b_must);
+2708:         assert all([ee < 1.e-4 for ee in [eps_uz, eps_a,
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_eps_uz); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = PyFloat_FromDouble(__pyx_v_eps_a); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
      __pyx_t_9 = PyTuple_New(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_8);
      __pyx_t_4 = 0;
      __pyx_t_2 = 0;
      __pyx_t_6 = 0;
      __pyx_t_7 = 0;
      __pyx_t_8 = 0;
      __pyx_t_8 = __pyx_t_9; __Pyx_INCREF(__pyx_t_8); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      for (;;) {
        if (__pyx_t_10 >= 5) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 2708, __pyx_L1_error)
        #else
        __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2708, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_ee, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = PyObject_RichCompare(__pyx_v_ee, __pyx_float_1_eneg_4, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2708, __pyx_L1_error)
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 2708, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2708, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_3)) {
+2709:                                           eps_vz, eps_b,
      __pyx_t_6 = PyFloat_FromDouble(__pyx_v_eps_vz); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = PyFloat_FromDouble(__pyx_v_eps_b); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
+2710:                                           eps_plane]]), error_message
      __pyx_t_8 = PyFloat_FromDouble(__pyx_v_eps_plane); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2710, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
/* … */
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 2708, __pyx_L1_error)
      }
    }
    #endif
+2711:         error_message = "ves_type must be a str in ['Tor','Lin']!"
    __Pyx_INCREF(__pyx_kp_s_ves_type_must_be_a_str_in_Tor_Li);
    __Pyx_DECREF_SET(__pyx_v_error_message, __pyx_kp_s_ves_type_must_be_a_str_in_Tor_Li);
+2712:         assert ves_type.lower() in ['tor', 'lin'], error_message
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_8 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2712, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_8, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2712, __pyx_L1_error)
      if (!__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_8, __pyx_n_s_lin, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2712, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
      __pyx_L8_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_v_error_message);
        __PYX_ERR(0, 2712, __pyx_L1_error)
      }
    }
    #endif
 2713: 
 2714:     # ==========================================================================
+2715:     if ves_type.lower() == 'tor':
  __pyx_t_8 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_8, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2715, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L10;
  }
 2716:         # .. if there are, we get the limits for the vessel ....................
+2717:         if ves_lims is None  or np.size(ves_lims) == 0:
    __pyx_t_5 = ((((PyObject *) __pyx_v_ves_lims.memview) == Py_None) != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L12_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_ves_lims, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_9, function);
      }
    }
    __pyx_t_8 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_7, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_9 = __Pyx_PyInt_EqObjC(__pyx_t_8, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2717, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_3 = __pyx_t_5;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L11;
    }
+2718:             are_limited = False
      __pyx_v_are_limited = 0;
+2719:             lbounds_ves[0] = 0
      (__pyx_v_lbounds_ves[0]) = 0.0;
+2720:             lbounds_ves[1] = 0
      (__pyx_v_lbounds_ves[1]) = 0.0;
 2721:         else:
+2722:             are_limited = True
    /*else*/ {
      __pyx_v_are_limited = 1;
+2723:             lbounds_ves[0] = Catan2(Csin(ves_lims[0]), Ccos(ves_lims[0]))
      __pyx_t_11 = 0;
      __pyx_t_12 = 0;
      (__pyx_v_lbounds_ves[0]) = atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_11)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_12)) )))));
+2724:             lbounds_ves[1] = Catan2(Csin(ves_lims[1]), Ccos(ves_lims[1]))
      __pyx_t_13 = 1;
      __pyx_t_14 = 1;
      (__pyx_v_lbounds_ves[1]) = atan2(sin((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_13)) )))), cos((*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_14)) )))));
    }
    __pyx_L11:;
 2725:         # -- Toroidal case -----------------------------------------------------
+2726:         for ind_surf in range(num_surf):
    __pyx_t_15 = __pyx_v_num_surf;
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_ind_surf = __pyx_t_17;
 2727:             # rmin is necessary to avoid looking on the other side of the tok
+2728:             if rmin < 0.:
      __pyx_t_3 = ((__pyx_v_rmin < 0.) != 0);
      if (__pyx_t_3) {
/* … */
      }
+2729:                 rmin = 0.95*min(np.min(ves_poly[ind_surf, 0, ...]),
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_min); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_18.data = __pyx_v_ves_poly.data;
        __pyx_t_18.memview = __pyx_v_ves_poly.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_18, 0);
        {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_ind_surf;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[0];
        if ((0)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __pyx_t_18.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

{
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[1];
        if ((0)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __pyx_t_18.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_18.shape[0] = __pyx_v_ves_poly.shape[2];
__pyx_t_18.strides[0] = __pyx_v_ves_poly.strides[2];
    __pyx_t_18.suboffsets[0] = -1;

__pyx_t_8 = __pyx_memoryview_fromslice(__pyx_t_18, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
        __pyx_t_18.memview = NULL;
        __pyx_t_18.data = NULL;
        __pyx_t_20 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_20 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_20)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_20);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
          }
        }
        __pyx_t_1 = (__pyx_t_20) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_20, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
        __pyx_t_9 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_21 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_21 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2729, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_v_rmin = __pyx_t_21;
+2730:                                     np.min(np.hypot(ray_orig[0, ...],
        __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_min); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_hypot); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_18.data = __pyx_v_ray_orig.data;
        __pyx_t_18.memview = __pyx_v_ray_orig.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_18, 0);
        {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ray_orig.strides[0];
        if ((0)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __pyx_t_18.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_18.shape[0] = __pyx_v_ray_orig.shape[1];
__pyx_t_18.strides[0] = __pyx_v_ray_orig.strides[1];
    __pyx_t_18.suboffsets[0] = -1;

__pyx_t_7 = __pyx_memoryview_fromslice(__pyx_t_18, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
        __pyx_t_18.memview = NULL;
        __pyx_t_18.data = NULL;
/* … */
        __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (__pyx_t_3) {
          __Pyx_INCREF(__pyx_t_9);
          __pyx_t_6 = __pyx_t_9;
        } else {
          __Pyx_INCREF(__pyx_t_1);
          __pyx_t_6 = __pyx_t_1;
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+2731:                                                     ray_orig[1, ...])))
        __pyx_t_18.data = __pyx_v_ray_orig.data;
        __pyx_t_18.memview = __pyx_v_ray_orig.memview;
        __PYX_INC_MEMVIEW(&__pyx_t_18, 0);
        {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ray_orig.strides[0];
        if ((0)) __PYX_ERR(0, 2731, __pyx_L1_error)
        __pyx_t_18.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_18.shape[0] = __pyx_v_ray_orig.shape[1];
__pyx_t_18.strides[0] = __pyx_v_ray_orig.strides[1];
    __pyx_t_18.suboffsets[0] = -1;

__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_18, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2731, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
        __pyx_t_18.memview = NULL;
        __pyx_t_18.data = NULL;
        __pyx_t_4 = NULL;
        __pyx_t_19 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
          if (likely(__pyx_t_4)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_4);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_6, function);
            __pyx_t_19 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_2};
          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_19, 2+__pyx_t_19); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2730, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
          PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_7, __pyx_t_2};
          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_19, 2+__pyx_t_19); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2730, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        } else
        #endif
        {
          __pyx_t_20 = PyTuple_New(2+__pyx_t_19); if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 2730, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_20);
          if (__pyx_t_4) {
            __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_20, 0, __pyx_t_4); __pyx_t_4 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_20, 0+__pyx_t_19, __pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_20, 1+__pyx_t_19, __pyx_t_2);
          __pyx_t_7 = 0;
          __pyx_t_2 = 0;
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_20, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2730, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_9 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_8);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2730, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+2732:             rmin2 = rmin*rmin
      __pyx_v_rmin2 = (__pyx_v_rmin * __pyx_v_rmin);
 2733:             # Variable to avoid looking "behind" blind spot of tore
+2734:             if forbid:
      __pyx_t_3 = (__pyx_v_forbid != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L17;
      }
+2735:                 forbid0, forbidbis = 1, 1
        __pyx_t_3 = 1;
        __pyx_t_5 = 1;
        __pyx_v_forbid0 = __pyx_t_3;
        __pyx_v_forbidbis = __pyx_t_5;
 2736:             else:
+2737:                 forbid0, forbidbis = 0, 0
      /*else*/ {
        __pyx_t_5 = 0;
        __pyx_t_3 = 0;
        __pyx_v_forbid0 = __pyx_t_5;
        __pyx_v_forbidbis = __pyx_t_3;
      }
      __pyx_L17:;
 2738:             # Getting size of poly
+2739:             npts_poly = lnvert[ind_surf]
      __pyx_t_22 = __pyx_v_ind_surf;
      __pyx_v_npts_poly = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_22)) )));
 2740:             # -- Computing intersection between LOS and Vessel -----------------
+2741:             raytracing_minmax_struct_tor(num_los, ray_vdir, ray_orig,
      __pyx_f_4tofu_4geom_5_GG03_raytracing_minmax_struct_tor(__pyx_v_num_los, __pyx_v_ray_vdir, __pyx_v_ray_orig, (&(__pyx_v_coeff_inter_out->data.as_doubles[(__pyx_v_ind_surf * __pyx_v_num_los)])), (&(__pyx_v_coeff_inter_in->data.as_doubles[(__pyx_v_ind_surf * __pyx_v_num_los)])), __pyx_v_forbid0, __pyx_v_forbidbis, __pyx_v_rmin, __pyx_v_rmin2, __pyx_v_Crit2_base, __pyx_v_npts_poly, __pyx_v_lbounds_ves, __pyx_v_are_limited, (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_23 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_24 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_25)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_26 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_27 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_28)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_29 * __pyx_v_ves_norm.strides[0]) ) + __pyx_t_30 * __pyx_v_ves_norm.strides[1]) )) + __pyx_t_31)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_32 * __pyx_v_ves_norm.strides[0]) ) + __pyx_t_33 * __pyx_v_ves_norm.strides[1]) )) + __pyx_t_34)) )))), __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_num_threads);
    }
 2742:                                          &coeff_inter_out.data.as_doubles[ind_surf*num_los],
 2743:                                          &coeff_inter_in.data.as_doubles[ind_surf*num_los],
 2744:                                          forbid0, forbidbis,
 2745:                                          rmin, rmin2, Crit2_base,
 2746:                                          npts_poly, lbounds_ves,
 2747:                                          are_limited,
+2748:                                          &ves_poly[ind_surf][0][0],
      __pyx_t_23 = __pyx_v_ind_surf;
      __pyx_t_24 = 0;
      __pyx_t_25 = 0;
+2749:                                          &ves_poly[ind_surf][1][0],
      __pyx_t_26 = __pyx_v_ind_surf;
      __pyx_t_27 = 1;
      __pyx_t_28 = 0;
+2750:                                          &ves_norm[ind_surf][0][0],
      __pyx_t_29 = __pyx_v_ind_surf;
      __pyx_t_30 = 0;
      __pyx_t_31 = 0;
+2751:                                          &ves_norm[ind_surf][1][0],
      __pyx_t_32 = __pyx_v_ind_surf;
      __pyx_t_33 = 1;
      __pyx_t_34 = 0;
 2752:                                          eps_uz, eps_vz, eps_a,
 2753:                                          eps_b, eps_plane,
 2754:                                          num_threads)
 2755:     else:
 2756:         # .. if there are, we get the limits for the vessel ....................
+2757:         if ves_lims is None  or np.size(ves_lims) == 0:
  /*else*/ {
    __pyx_t_5 = ((((PyObject *) __pyx_v_ves_lims.memview) == Py_None) != 0);
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L19_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_ves_lims, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_9 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_9, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 2757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_3 = __pyx_t_5;
    __pyx_L19_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L18;
    }
+2758:             are_limited = False
      __pyx_v_are_limited = 0;
+2759:             lbounds_ves[0] = 0
      (__pyx_v_lbounds_ves[0]) = 0.0;
+2760:             lbounds_ves[1] = 0
      (__pyx_v_lbounds_ves[1]) = 0.0;
 2761:         else:
+2762:             are_limited = True
    /*else*/ {
      __pyx_v_are_limited = 1;
+2763:             lbounds_ves[0] = ves_lims[0]
      __pyx_t_35 = 0;
      (__pyx_v_lbounds_ves[0]) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_35)) )));
+2764:             lbounds_ves[1] = ves_lims[1]
      __pyx_t_36 = 1;
      (__pyx_v_lbounds_ves[1]) = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_ves_lims.data) + __pyx_t_36)) )));
    }
    __pyx_L18:;
 2765: 
 2766:         # -- Cylindrical case --------------------------------------------------
+2767:         for ind_surf in range(num_surf):
    __pyx_t_15 = __pyx_v_num_surf;
    __pyx_t_16 = __pyx_t_15;
    for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
      __pyx_v_ind_surf = __pyx_t_17;
 2768:             # Getting size of poly
+2769:             npts_poly = lnvert[ind_surf]
      __pyx_t_37 = __pyx_v_ind_surf;
      __pyx_v_npts_poly = (*((long *) ( /* dim=0 */ ((char *) (((long *) __pyx_v_lnvert.data) + __pyx_t_37)) )));
+2770:             raytracing_minmax_struct_lin(num_los, ray_orig, ray_vdir, npts_poly,
      __pyx_f_4tofu_4geom_5_GG03_raytracing_minmax_struct_lin(__pyx_v_num_los, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_npts_poly, (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_38 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_39 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_40)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_41 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_42 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_43)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_44 * __pyx_v_ves_norm.strides[0]) ) + __pyx_t_45 * __pyx_v_ves_norm.strides[1]) )) + __pyx_t_46)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_norm.data + __pyx_t_47 * __pyx_v_ves_norm.strides[0]) ) + __pyx_t_48 * __pyx_v_ves_norm.strides[1]) )) + __pyx_t_49)) )))), (__pyx_v_lbounds_ves[0]), (__pyx_v_lbounds_ves[1]), (&(__pyx_v_coeff_inter_out->data.as_doubles[(__pyx_v_ind_surf * __pyx_v_num_los)])), (&(__pyx_v_coeff_inter_in->data.as_doubles[(__pyx_v_ind_surf * __pyx_v_num_los)])), __pyx_v_eps_plane);
    }
  }
  __pyx_L10:;
+2771:                                          &ves_poly[ind_surf][0][0],
      __pyx_t_38 = __pyx_v_ind_surf;
      __pyx_t_39 = 0;
      __pyx_t_40 = 0;
+2772:                                          &ves_poly[ind_surf][1][0],
      __pyx_t_41 = __pyx_v_ind_surf;
      __pyx_t_42 = 1;
      __pyx_t_43 = 0;
+2773:                                          &ves_norm[ind_surf][0][0],
      __pyx_t_44 = __pyx_v_ind_surf;
      __pyx_t_45 = 0;
      __pyx_t_46 = 0;
+2774:                                          &ves_norm[ind_surf][1][0],
      __pyx_t_47 = __pyx_v_ind_surf;
      __pyx_t_48 = 1;
      __pyx_t_49 = 0;
 2775:                                          lbounds_ves[0], lbounds_ves[1],
 2776:                                          &coeff_inter_out.data.as_doubles[ind_surf*num_los],
 2777:                                          &coeff_inter_in.data.as_doubles[ind_surf*num_los],
 2778:                                          eps_plane)
 2779: 
+2780:     return np.asarray(coeff_inter_in), np.asarray(coeff_inter_out)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_9, ((PyObject *)__pyx_v_coeff_inter_in)) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)__pyx_v_coeff_inter_in));
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_asarray); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_6 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, ((PyObject *)__pyx_v_coeff_inter_out)) : __Pyx_PyObject_CallOneArg(__pyx_t_8, ((PyObject *)__pyx_v_coeff_inter_out));
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
  __pyx_t_1 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 2781: 
 2782: 
 2783: 
+2784: cdef inline void raytracing_minmax_struct_tor(int num_los,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_raytracing_minmax_struct_tor(CYTHON_UNUSED int __pyx_v_num_los, __Pyx_memviewslice __pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ray_orig, double *__pyx_v_coeff_inter_out, double *__pyx_v_coeff_inter_in, int __pyx_v_forbid0, int __pyx_v_forbidbis, double __pyx_v_rmin, double __pyx_v_rmin2, double __pyx_v_crit2_base, int __pyx_v_npts_poly, double *__pyx_v_langles, int __pyx_v_is_limited, double *__pyx_v_surf_polyx, double *__pyx_v_surf_polyy, double *__pyx_v_surf_normx, double *__pyx_v_surf_normy, double __pyx_v_eps_uz, double __pyx_v_eps_vz, double __pyx_v_eps_a, double __pyx_v_eps_b, double __pyx_v_eps_plane, int __pyx_v_num_threads) {
  double __pyx_v_upscaDp;
  double __pyx_v_upar2;
  double __pyx_v_dpar2;
  double __pyx_v_crit2;
  double __pyx_v_idpar2;
  double __pyx_v_dist;
  double __pyx_v_s1x;
  double __pyx_v_s1y;
  double __pyx_v_s2x;
  double __pyx_v_s2y;
  CYTHON_UNUSED double __pyx_v_lim_min;
  CYTHON_UNUSED double __pyx_v_lim_max;
  double __pyx_v_invuz;
  CYTHON_UNUSED int __pyx_v_totnvert;
  CYTHON_UNUSED int __pyx_v_ind_struct;
  int __pyx_v_ind_los;
  int __pyx_v_found_new_kout;
  double __pyx_v_dummy[3];
  int __pyx_v_silly[1];
  double *__pyx_v_kpout_loc;
  double *__pyx_v_kpin_loc;
  double *__pyx_v_loc_org;
  double *__pyx_v_loc_dir;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 2785:                                              double[:,::1] ray_vdir,
 2786:                                              double[:,::1] ray_orig,
 2787:                                              double* coeff_inter_out,
 2788:                                              double* coeff_inter_in,
 2789:                                              bint forbid0, bint forbidbis,
 2790:                                              double rmin, double rmin2,
 2791:                                              double crit2_base,
 2792:                                              int npts_poly,
 2793:                                              double* langles,
 2794:                                              bint is_limited,
 2795:                                              double* surf_polyx,
 2796:                                              double* surf_polyy,
 2797:                                              double* surf_normx,
 2798:                                              double* surf_normy,
 2799:                                              double eps_uz, double eps_vz,
 2800:                                              double eps_a, double eps_b,
 2801:                                              double eps_plane,
 2802:                                              int num_threads) nogil:
 2803:     """
 2804:     Computes the entry and exit point of all provided LOS/rays for a set of
 2805:     "IN" structures in a TORE. A "in" structure is typically a vessel, or
 2806:     flux surface and are (noramally) toroidally continous but you can specify
 2807:     if it is otherwise with lis_limited and langles.
 2808:     This functions is parallelized.
 2809: 
 2810:     Params
 2811:     ======
 2812:     num_los : int
 2813:        Total number of lines of sight (LOS) (aka. rays)
 2814:     ray_vdir : (3, num_los) double array
 2815:        LOS normalized direction vector
 2816:     ray_orig : (3, num_los) double array
 2817:        LOS origin points coordinates
 2818:     coeff_inter_out : (num_los) double array <INOUT>
 2819:        Coefficient of exit (kout) of the last point of intersection for each LOS
 2820:        with the global geometry (with ALL structures)
 2821:     coeff_inter_in : (num_los) double array <INOUT>
 2822:        Coefficient of entry (kin) of the last point of intersection for each LOS
 2823:        with the global geometry (with ALL structures). If intersection at origin
 2824:        k = 0, if no intersection k = NAN
 2825:     forbid0 : bool
 2826:        Should we forbid values behind vissible radius ? (see Rmin). If false,
 2827:        will test "hidden" part always, else, it will depend on the LOS and
 2828:        on forbidbis.
 2829:     forbidbis: bint
 2830:        Should we forbid values behind vissible radius for each LOS ?
 2831:     rmin : double
 2832:        Minimal radius of vessel to take into consideration
 2833:     rmin2 : double
 2834:        Squared valued of the minimal radius
 2835:     crit2_base : double
 2836:        Critical value to evaluate for each LOS if horizontal or not
 2837:     npts_poly : int
 2838:        Number of OUT structures (not counting the limited versions).
 2839:        If not is_out_struct then lenght of vpoly.
 2840:     langles : (2 * nstruct) double array
 2841:        Minimum and maximum angles where the structure lives. If the structure
 2842:        number 'i' is toroidally continous then langles[i:i+2] = [0, 0].
 2843:     is_limited : bint
 2844:        bool to know if the flux surface is limited or not
 2845:     surf_polyx : (ntotnvert)
 2846:        List of "x" coordinates of the polygon's vertices on
 2847:        the poloidal plane
 2848:     surf_polyy : (ntotnvert)
 2849:        List of "y" coordinates of the polygon's vertices on
 2850:        the poloidal plane
 2851:     surf_normx : (2, num_vertex-1) double array
 2852:        List of "x" coordinates of the normal vectors going "inwards" of the
 2853:         edges of the Polygon defined by surf_poly
 2854:     surf_normy : (2, num_vertex-1) double array
 2855:        List of "y" coordinates of the normal vectors going "inwards" of the
 2856:         edges of the Polygon defined by surf_poly
 2857:     eps<val> : double
 2858:        Small value, acceptance of error
 2859:     num_threads : int
 2860:        The num_threads argument indicates how many threads the team should
 2861:        consist of. If not given, OpenMP will decide how many threads to use.
 2862:        Typically this is the number of cores available on the machine.
 2863:     """
+2864:     cdef double upscaDp=0., upar2=0., dpar2=0., crit2=0., idpar2=0.
  __pyx_v_upscaDp = 0.;
  __pyx_v_upar2 = 0.;
  __pyx_v_dpar2 = 0.;
  __pyx_v_crit2 = 0.;
  __pyx_v_idpar2 = 0.;
+2865:     cdef double dist = 0., s1x = 0., s1y = 0., s2x = 0., s2y = 0.
  __pyx_v_dist = 0.;
  __pyx_v_s1x = 0.;
  __pyx_v_s1y = 0.;
  __pyx_v_s2x = 0.;
  __pyx_v_s2y = 0.;
+2866:     cdef double lim_min=0., lim_max=0., invuz=0.
  __pyx_v_lim_min = 0.;
  __pyx_v_lim_max = 0.;
  __pyx_v_invuz = 0.;
+2867:     cdef int totnvert=0
  __pyx_v_totnvert = 0;
 2868:     cdef int nvert
 2869:     cdef int ind_struct, ind_bounds
 2870:     cdef int ind_los, ii, jj, kk
 2871:     cdef bint lim_is_none
 2872:     cdef bint found_new_kout
 2873:     cdef bint inter_bbox
 2874:     cdef double[3] dummy
 2875:     cdef int[1] silly
+2876:     cdef double* kpout_loc = NULL
  __pyx_v_kpout_loc = NULL;
+2877:     cdef double* kpin_loc = NULL
  __pyx_v_kpin_loc = NULL;
+2878:     cdef double* loc_org = NULL
  __pyx_v_loc_org = NULL;
+2879:     cdef double* loc_dir = NULL
  __pyx_v_loc_dir = NULL;
 2880: 
 2881:     # == Defining parallel part ================================================
+2882:     with nogil, parallel(num_threads=num_threads):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_loc_dir, __pyx_v_loc_org)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_loc_dir, __pyx_v_loc_org) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_kpin_loc = ((double *)1);
                __pyx_v_kpout_loc = ((double *)1);
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
 2883:         # We use local arrays for each thread so
+2884:         loc_org   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_org = ((double *)malloc(((sizeof(double)) * 3)));
+2885:         loc_dir   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_dir = ((double *)malloc(((sizeof(double)) * 3)));
+2886:         kpin_loc  = <double *> malloc(sizeof(double) * 1)
                __pyx_v_kpin_loc = ((double *)malloc(((sizeof(double)) * 1)));
+2887:         kpout_loc = <double *> malloc(sizeof(double) * 1)
                __pyx_v_kpout_loc = ((double *)malloc(((sizeof(double)) * 1)));
 2888:         # == The parallelization over the LOS ==================================
+2889:         for ind_los in prange(num_los, schedule='dynamic'):
                __pyx_t_1 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_3 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dist) lastprivate(__pyx_v_dpar2) lastprivate(__pyx_v_forbidbis) lastprivate(__pyx_v_found_new_kout) lastprivate(__pyx_v_idpar2) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_struct) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_s1x) lastprivate(__pyx_v_s1y) lastprivate(__pyx_v_s2x) lastprivate(__pyx_v_s2y) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_2);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dist = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_forbidbis = ((int)0xbad0bad0);
                                __pyx_v_found_new_kout = ((int)0xbad0bad0);
                                __pyx_v_idpar2 = ((double)__PYX_NAN());
                                __pyx_v_ind_struct = ((int)0xbad0bad0);
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_s1x = ((double)__PYX_NAN());
                                __pyx_v_s1y = ((double)__PYX_NAN());
                                __pyx_v_s2x = ((double)__PYX_NAN());
                                __pyx_v_s2y = ((double)__PYX_NAN());
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+2890:             ind_struct = 0
                                __pyx_v_ind_struct = 0;
+2891:             loc_org[0] = ray_orig[0, ind_los]
                                __pyx_t_4 = 0;
                                __pyx_t_5 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_4 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_5)) )));
+2892:             loc_org[1] = ray_orig[1, ind_los]
                                __pyx_t_6 = 1;
                                __pyx_t_7 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_6 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_7)) )));
+2893:             loc_org[2] = ray_orig[2, ind_los]
                                __pyx_t_8 = 2;
                                __pyx_t_9 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_8 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_9)) )));
+2894:             loc_dir[0] = ray_vdir[0, ind_los]
                                __pyx_t_10 = 0;
                                __pyx_t_11 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_10 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_11)) )));
+2895:             loc_dir[1] = ray_vdir[1, ind_los]
                                __pyx_t_12 = 1;
                                __pyx_t_13 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_12 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_13)) )));
+2896:             loc_dir[2] = ray_vdir[2, ind_los]
                                __pyx_t_14 = 2;
                                __pyx_t_15 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_14 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_15)) )));
+2897:             kpout_loc[0] = 0
                                (__pyx_v_kpout_loc[0]) = 0.0;
+2898:             kpin_loc[0] = 0
                                (__pyx_v_kpin_loc[0]) = 0.0;
 2899:             # -- Computing values that depend on the LOS/ray -------------------
+2900:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+2901:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+2902:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+2903:             idpar2 = 1./dpar2
                                __pyx_v_idpar2 = (1. / __pyx_v_dpar2);
+2904:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+2905:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
 2906: 
 2907:             # -- Prepare in case forbid is True --------------------------------
+2908:             if forbid0 and not dpar2>0:
                                __pyx_t_17 = (__pyx_v_forbid0 != 0);
                                if (__pyx_t_17) {
                                } else {
                                  __pyx_t_16 = __pyx_t_17;
                                  goto __pyx_L15_bool_binop_done;
                                }
                                __pyx_t_17 = ((!((__pyx_v_dpar2 > 0.0) != 0)) != 0);
                                __pyx_t_16 = __pyx_t_17;
                                __pyx_L15_bool_binop_done:;
                                if (__pyx_t_16) {
/* … */
                                }
+2909:                 forbidbis = 0
                                  __pyx_v_forbidbis = 0;
+2910:             if forbidbis:
                                __pyx_t_16 = (__pyx_v_forbidbis != 0);
                                if (__pyx_t_16) {
/* … */
                                }
 2911:                 # Compute coordinates of the 2 points where the tangents touch
 2912:                 # the inner circle
+2913:                 dist = Csqrt(dpar2-rmin2)
                                  __pyx_v_dist = sqrt((__pyx_v_dpar2 - __pyx_v_rmin2));
+2914:                 s1x = (rmin2 * loc_org[0] + rmin * loc_org[1] * dist) * idpar2
                                  __pyx_v_s1x = (((__pyx_v_rmin2 * (__pyx_v_loc_org[0])) + ((__pyx_v_rmin * (__pyx_v_loc_org[1])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2915:                 s1y = (rmin2 * loc_org[1] - rmin * loc_org[0] * dist) * idpar2
                                  __pyx_v_s1y = (((__pyx_v_rmin2 * (__pyx_v_loc_org[1])) - ((__pyx_v_rmin * (__pyx_v_loc_org[0])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2916:                 s2x = (rmin2 * loc_org[0] - rmin * loc_org[1] * dist) * idpar2
                                  __pyx_v_s2x = (((__pyx_v_rmin2 * (__pyx_v_loc_org[0])) - ((__pyx_v_rmin * (__pyx_v_loc_org[1])) * __pyx_v_dist)) * __pyx_v_idpar2);
+2917:                 s2y = (rmin2 * loc_org[1] + rmin * loc_org[0] * dist) * idpar2
                                  __pyx_v_s2y = (((__pyx_v_rmin2 * (__pyx_v_loc_org[1])) + ((__pyx_v_rmin * (__pyx_v_loc_org[0])) * __pyx_v_dist)) * __pyx_v_idpar2);
 2918: 
 2919:             # == Case "IN" structure =======================================
 2920:             # Nothing to do but compute intersection between vessel and LOS
+2921:             found_new_kout = comp_inter_los_vpoly(loc_org, loc_dir,
                                __pyx_v_found_new_kout = __pyx_f_4tofu_4geom_5_GG03_comp_inter_los_vpoly(__pyx_v_loc_org, __pyx_v_loc_dir, __pyx_v_surf_polyx, __pyx_v_surf_polyy, __pyx_v_surf_normx, __pyx_v_surf_normy, __pyx_v_npts_poly, __pyx_v_is_limited, (__pyx_v_langles[0]), (__pyx_v_langles[1]), __pyx_v_forbidbis, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_s1x, __pyx_v_s1y, __pyx_v_s2x, __pyx_v_s2y, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_eps_plane, 1, __pyx_v_kpin_loc, __pyx_v_kpout_loc, __pyx_v_silly, __pyx_v_dummy, NULL);
 2922:                                                   surf_polyx,
 2923:                                                   surf_polyy,
 2924:                                                   surf_normx,
 2925:                                                   surf_normy,
 2926:                                                   npts_poly,
 2927:                                                   is_limited,
 2928:                                                   langles[0], langles[1],
 2929:                                                   forbidbis,
 2930:                                                   upscaDp, upar2,
 2931:                                                   dpar2, invuz,
 2932:                                                   s1x, s1y, s2x, s2y,
 2933:                                                   crit2, eps_uz, eps_vz,
 2934:                                                   eps_a,eps_b, eps_plane,
 2935:                                                   True,
 2936:                                                   kpin_loc, kpout_loc,
 2937:                                                   silly, dummy)
+2938:             if found_new_kout:
                                __pyx_t_16 = (__pyx_v_found_new_kout != 0);
                                if (__pyx_t_16) {
/* … */
                                  goto __pyx_L18;
                                }
+2939:                 coeff_inter_in[ind_los]  = kpin_loc[0]
                                  (__pyx_v_coeff_inter_in[__pyx_v_ind_los]) = (__pyx_v_kpin_loc[0]);
+2940:                 coeff_inter_out[ind_los] = kpout_loc[0]
                                  (__pyx_v_coeff_inter_out[__pyx_v_ind_los]) = (__pyx_v_kpout_loc[0]);
 2941:             else:
+2942:                 coeff_inter_in[ind_los]  = Cnan
                                /*else*/ {
                                  (__pyx_v_coeff_inter_in[__pyx_v_ind_los]) = NAN;
+2943:                 coeff_inter_out[ind_los] = Cnan
                                  (__pyx_v_coeff_inter_out[__pyx_v_ind_los]) = NAN;
                                }
                                __pyx_L18:;
                            }
                        }
                    }
                }
+2944:         free(loc_org)
                free(__pyx_v_loc_org);
+2945:         free(loc_dir)
                free(__pyx_v_loc_dir);
+2946:         free(kpin_loc)
                free(__pyx_v_kpin_loc);
+2947:         free(kpout_loc)
                free(__pyx_v_kpout_loc);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+2948:     return
  goto __pyx_L0;
 2949: 
 2950: 
+2951: cdef inline void raytracing_minmax_struct_lin(int Nl,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_raytracing_minmax_struct_lin(int __pyx_v_Nl, __Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, int __pyx_v_Ns, double *__pyx_v_polyx_tab, double *__pyx_v_polyy_tab, double *__pyx_v_normx_tab, double *__pyx_v_normy_tab, double __pyx_v_L0, double __pyx_v_L1, double *__pyx_v_kin_tab, double *__pyx_v_kout_tab, double __pyx_v_EpsPlane) {
  int __pyx_v_is_in_path;
  int __pyx_v_ii;
  int __pyx_v_jj;
  double __pyx_v_kin;
  double __pyx_v_kout;
  double __pyx_v_scauVin;
  double __pyx_v_q;
  double __pyx_v_X;
  double __pyx_v_sca;
  CYTHON_UNUSED int __pyx_v_indin;
  CYTHON_UNUSED int __pyx_v_indout;
  int __pyx_v_Done;
  PyObject *__pyx_v_k = NULL;
  double __pyx_v_V1;
  double __pyx_v_V2;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("raytracing_minmax_struct_lin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_XDECREF(__pyx_t_29);
  __Pyx_WriteUnraisable("tofu.geom._GG03.raytracing_minmax_struct_lin", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_RefNannyFinishContext();
}
 2952:                                              double[:,::1] Ds,
 2953:                                              double [:,::1] us,
 2954:                                              int Ns,
 2955:                                              double* polyx_tab,
 2956:                                              double* polyy_tab,
 2957:                                              double* normx_tab,
 2958:                                              double* normy_tab,
 2959:                                              double L0, double L1,
 2960:                                              double* kin_tab,
 2961:                                              double* kout_tab,
 2962:                                              double EpsPlane):
 2963:     cdef bint is_in_path
+2964:     cdef int ii=0, jj=0
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
 2965:     cdef double kin, kout, scauVin, q, X, sca
+2966:     cdef int indin=0, indout=0, Done=0
  __pyx_v_indin = 0;
  __pyx_v_indout = 0;
  __pyx_v_Done = 0;
 2967: 
+2968:     kin_tab[ii]  = Cnan
  (__pyx_v_kin_tab[__pyx_v_ii]) = NAN;
+2969:     kout_tab[ii] = Cnan
  (__pyx_v_kout_tab[__pyx_v_ii]) = NAN;
 2970: 
+2971:     for ii in range(0,Nl):
  __pyx_t_1 = __pyx_v_Nl;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
+2972:         kout, kin, Done = 1.e12, 1e12, 0
    __pyx_t_4 = 1.e12;
    __pyx_t_5 = 1e12;
    __pyx_t_6 = 0;
    __pyx_v_kout = __pyx_t_4;
    __pyx_v_kin = __pyx_t_5;
    __pyx_v_Done = __pyx_t_6;
 2973:         # For cylinder
+2974:         for jj in range(0,Ns):
    __pyx_t_6 = __pyx_v_Ns;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_jj = __pyx_t_8;
+2975:             scauVin = us[1,ii] * normx_tab[jj] + us[2,ii] * normy_tab[jj]
      __pyx_t_9 = 1;
      __pyx_t_10 = __pyx_v_ii;
      __pyx_t_11 = 2;
      __pyx_t_12 = __pyx_v_ii;
      __pyx_v_scauVin = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_9 * __pyx_v_us.strides[0]) )) + __pyx_t_10)) ))) * (__pyx_v_normx_tab[__pyx_v_jj])) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_11 * __pyx_v_us.strides[0]) )) + __pyx_t_12)) ))) * (__pyx_v_normy_tab[__pyx_v_jj])));
 2976:             # Only if plane not parallel to line
+2977:             if Cabs(scauVin)>EpsPlane:
      __pyx_t_13 = ((fabs(__pyx_v_scauVin) > __pyx_v_EpsPlane) != 0);
      if (__pyx_t_13) {
/* … */
      }
    }
+2978:                 k = -( (Ds[1,ii] - polyx_tab[jj]) * normx_tab[jj] +
        __pyx_t_14 = 1;
        __pyx_t_15 = __pyx_v_ii;
+2979:                        (Ds[2,ii] - polyy_tab[jj]) * normy_tab[jj]) \
        __pyx_t_16 = 2;
        __pyx_t_17 = __pyx_v_ii;
+2980:                        / scauVin
        __pyx_t_18 = PyFloat_FromDouble(((-((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_14 * __pyx_v_Ds.strides[0]) )) + __pyx_t_15)) ))) - (__pyx_v_polyx_tab[__pyx_v_jj])) * (__pyx_v_normx_tab[__pyx_v_jj])) + (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_16 * __pyx_v_Ds.strides[0]) )) + __pyx_t_17)) ))) - (__pyx_v_polyy_tab[__pyx_v_jj])) * (__pyx_v_normy_tab[__pyx_v_jj])))) / __pyx_v_scauVin)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2980, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_18);
        __pyx_t_18 = 0;
 2981:                 # Only if on good side of semi-line
+2982:                 if k>=0.:
        __pyx_t_18 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_18); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2982, __pyx_L1_error)
        __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 2982, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        if (__pyx_t_13) {
/* … */
        }
+2983:                     V1 = polyx_tab[jj+1]-polyx_tab[jj]
          __pyx_v_V1 = ((__pyx_v_polyx_tab[(__pyx_v_jj + 1)]) - (__pyx_v_polyx_tab[__pyx_v_jj]));
+2984:                     V2 = polyy_tab[jj+1]-polyy_tab[jj]
          __pyx_v_V2 = ((__pyx_v_polyy_tab[(__pyx_v_jj + 1)]) - (__pyx_v_polyy_tab[__pyx_v_jj]));
+2985:                     q = (  (Ds[1,ii] + k * us[1,ii] - polyx_tab[jj]) * V1
          __pyx_t_19 = 1;
          __pyx_t_20 = __pyx_v_ii;
          __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_19 * __pyx_v_Ds.strides[0]) )) + __pyx_t_20)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_21 = 1;
          __pyx_t_22 = __pyx_v_ii;
          __pyx_t_23 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_21 * __pyx_v_us.strides[0]) )) + __pyx_t_22)) )))); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __pyx_t_24 = PyNumber_Multiply(__pyx_v_k, __pyx_t_23); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_24);
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_t_23 = PyNumber_Add(__pyx_t_18, __pyx_t_24); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __pyx_t_24 = PyFloat_FromDouble((__pyx_v_polyx_tab[__pyx_v_jj])); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_24);
          __pyx_t_18 = PyNumber_Subtract(__pyx_t_23, __pyx_t_24); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __pyx_t_24 = PyFloat_FromDouble(__pyx_v_V1); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_24);
          __pyx_t_23 = PyNumber_Multiply(__pyx_t_18, __pyx_t_24); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2985, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
+2986:                          + (Ds[2,ii] + k * us[2,ii] - polyy_tab[jj]) * V2) \
          __pyx_t_25 = 2;
          __pyx_t_26 = __pyx_v_ii;
          __pyx_t_24 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_25 * __pyx_v_Ds.strides[0]) )) + __pyx_t_26)) )))); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_24);
          __pyx_t_27 = 2;
          __pyx_t_28 = __pyx_v_ii;
          __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_27 * __pyx_v_us.strides[0]) )) + __pyx_t_28)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_29 = PyNumber_Multiply(__pyx_v_k, __pyx_t_18); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_29);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = PyNumber_Add(__pyx_t_24, __pyx_t_29); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __pyx_t_29 = PyFloat_FromDouble((__pyx_v_polyy_tab[__pyx_v_jj])); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_29);
          __pyx_t_24 = PyNumber_Subtract(__pyx_t_18, __pyx_t_29); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_24);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __pyx_t_29 = PyFloat_FromDouble(__pyx_v_V2); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_29);
          __pyx_t_18 = PyNumber_Multiply(__pyx_t_24, __pyx_t_29); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __pyx_t_29 = PyNumber_Add(__pyx_t_23, __pyx_t_18); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2986, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_29);
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+2987:                          / (V1*V1 + V2*V2)
          __pyx_t_18 = PyFloat_FromDouble(((__pyx_v_V1 * __pyx_v_V1) + (__pyx_v_V2 * __pyx_v_V2))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2987, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_23 = __Pyx_PyNumber_Divide(__pyx_t_29, __pyx_t_18); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2987, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_23); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2987, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_v_q = __pyx_t_5;
 2988:                     # Only of on the fraction of plane
+2989:                     if q>=0. and q<1.:
          __pyx_t_30 = ((__pyx_v_q >= 0.) != 0);
          if (__pyx_t_30) {
          } else {
            __pyx_t_13 = __pyx_t_30;
            goto __pyx_L10_bool_binop_done;
          }
          __pyx_t_30 = ((__pyx_v_q < 1.) != 0);
          __pyx_t_13 = __pyx_t_30;
          __pyx_L10_bool_binop_done:;
          if (__pyx_t_13) {
/* … */
          }
+2990:                         X = Ds[0,ii] + k*us[0,ii]
            __pyx_t_31 = 0;
            __pyx_t_32 = __pyx_v_ii;
            __pyx_t_23 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_31 * __pyx_v_Ds.strides[0]) )) + __pyx_t_32)) )))); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2990, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_23);
            __pyx_t_33 = 0;
            __pyx_t_34 = __pyx_v_ii;
            __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_33 * __pyx_v_us.strides[0]) )) + __pyx_t_34)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2990, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
            __pyx_t_29 = PyNumber_Multiply(__pyx_v_k, __pyx_t_18); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2990, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_29);
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __pyx_t_18 = PyNumber_Add(__pyx_t_23, __pyx_t_29); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2990, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_18);
            __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
            __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
            __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_18); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2990, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
            __pyx_v_X = __pyx_t_5;
 2991: 
 2992:                         # Only if within limits
+2993:                         if X>=L0 and X<=L1:
            __pyx_t_30 = ((__pyx_v_X >= __pyx_v_L0) != 0);
            if (__pyx_t_30) {
            } else {
              __pyx_t_13 = __pyx_t_30;
              goto __pyx_L13_bool_binop_done;
            }
            __pyx_t_30 = ((__pyx_v_X <= __pyx_v_L1) != 0);
            __pyx_t_13 = __pyx_t_30;
            __pyx_L13_bool_binop_done:;
            if (__pyx_t_13) {
/* … */
            }
+2994:                             sca = us[1,ii] * normx_tab[jj] \
              __pyx_t_35 = 1;
              __pyx_t_36 = __pyx_v_ii;
+2995:                                   + us[2,ii] * normy_tab[jj]
              __pyx_t_37 = 2;
              __pyx_t_38 = __pyx_v_ii;
              __pyx_v_sca = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_35 * __pyx_v_us.strides[0]) )) + __pyx_t_36)) ))) * (__pyx_v_normx_tab[__pyx_v_jj])) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_37 * __pyx_v_us.strides[0]) )) + __pyx_t_38)) ))) * (__pyx_v_normy_tab[__pyx_v_jj])));
 2996:                             # Only if new
+2997:                             if sca<=0 and k<kout:
              __pyx_t_30 = ((__pyx_v_sca <= 0.0) != 0);
              if (__pyx_t_30) {
              } else {
                __pyx_t_13 = __pyx_t_30;
                goto __pyx_L16_bool_binop_done;
              }
              __pyx_t_18 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 2997, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_18);
              __pyx_t_29 = PyObject_RichCompare(__pyx_v_k, __pyx_t_18, Py_LT); __Pyx_XGOTREF(__pyx_t_29); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 2997, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_29); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 2997, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
              __pyx_t_13 = __pyx_t_30;
              __pyx_L16_bool_binop_done:;
              if (__pyx_t_13) {
/* … */
                goto __pyx_L15;
              }
+2998:                                 kout = k
                __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2998, __pyx_L1_error)
                __pyx_v_kout = __pyx_t_5;
+2999:                                 indout = jj
                __pyx_v_indout = __pyx_v_jj;
+3000:                                 Done = 1
                __pyx_v_Done = 1;
+3001:                             elif sca>=0 and k<min(kin,kout):
              __pyx_t_30 = ((__pyx_v_sca >= 0.0) != 0);
              if (__pyx_t_30) {
              } else {
                __pyx_t_13 = __pyx_t_30;
                goto __pyx_L18_bool_binop_done;
              }
              __pyx_t_5 = __pyx_v_kout;
              __pyx_t_4 = __pyx_v_kin;
              if (((__pyx_t_5 < __pyx_t_4) != 0)) {
                __pyx_t_39 = __pyx_t_5;
              } else {
                __pyx_t_39 = __pyx_t_4;
              }
              __pyx_t_29 = PyFloat_FromDouble(__pyx_t_39); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3001, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_29);
              __pyx_t_18 = PyObject_RichCompare(__pyx_v_k, __pyx_t_29, Py_LT); __Pyx_XGOTREF(__pyx_t_18); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3001, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
              __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3001, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_13 = __pyx_t_30;
              __pyx_L18_bool_binop_done:;
              if (__pyx_t_13) {
/* … */
              }
              __pyx_L15:;
+3002:                                 kin = k
                __pyx_t_39 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_39 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3002, __pyx_L1_error)
                __pyx_v_kin = __pyx_t_39;
+3003:                                 indin = jj
                __pyx_v_indin = __pyx_v_jj;
 3004: 
 3005:         # For two faces
 3006:         # Only if plane not parallel to line
+3007:         if Cabs(us[0,ii])>EpsPlane:
    __pyx_t_40 = 0;
    __pyx_t_41 = __pyx_v_ii;
    __pyx_t_13 = ((fabs((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_40 * __pyx_v_us.strides[0]) )) + __pyx_t_41)) )))) > __pyx_v_EpsPlane) != 0);
    if (__pyx_t_13) {
/* … */
    }
 3008:             # First face
+3009:             k = -(Ds[0,ii]-L0)/us[0,ii]
      __pyx_t_42 = 0;
      __pyx_t_43 = __pyx_v_ii;
      __pyx_t_44 = 0;
      __pyx_t_45 = __pyx_v_ii;
      __pyx_t_18 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_42 * __pyx_v_Ds.strides[0]) )) + __pyx_t_43)) ))) - __pyx_v_L0)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_44 * __pyx_v_us.strides[0]) )) + __pyx_t_45)) ))))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3009, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_18);
      __pyx_t_18 = 0;
 3010:             # Only if on good side of semi-line
+3011:             if k>=0.:
      __pyx_t_18 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_18); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3011, __pyx_L1_error)
      __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3011, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      if (__pyx_t_13) {
/* … */
      }
 3012:                 # Only if inside VPoly
+3013:                 is_in_path = is_point_in_path(Ns, polyx_tab, polyy_tab,
        __pyx_v_is_in_path = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_Ns, __pyx_v_polyx_tab, __pyx_v_polyy_tab, __pyx_t_39, __pyx_t_5);
+3014:                                               Ds[1,ii]+k*us[1,ii],
        __pyx_t_46 = 1;
        __pyx_t_47 = __pyx_v_ii;
        __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_46 * __pyx_v_Ds.strides[0]) )) + __pyx_t_47)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_48 = 1;
        __pyx_t_49 = __pyx_v_ii;
        __pyx_t_29 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_48 * __pyx_v_us.strides[0]) )) + __pyx_t_49)) )))); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __pyx_t_23 = PyNumber_Multiply(__pyx_v_k, __pyx_t_29); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
        __pyx_t_29 = PyNumber_Add(__pyx_t_18, __pyx_t_23); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3014, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __pyx_t_39 = __pyx_PyFloat_AsDouble(__pyx_t_29); if (unlikely((__pyx_t_39 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3014, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
+3015:                                               Ds[2,ii]+k*us[2,ii])
        __pyx_t_50 = 2;
        __pyx_t_51 = __pyx_v_ii;
        __pyx_t_29 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_50 * __pyx_v_Ds.strides[0]) )) + __pyx_t_51)) )))); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3015, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __pyx_t_52 = 2;
        __pyx_t_53 = __pyx_v_ii;
        __pyx_t_23 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_52 * __pyx_v_us.strides[0]) )) + __pyx_t_53)) )))); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3015, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __pyx_t_18 = PyNumber_Multiply(__pyx_v_k, __pyx_t_23); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3015, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __pyx_t_23 = PyNumber_Add(__pyx_t_29, __pyx_t_18); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3015, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_23); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3015, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
+3016:                 if is_in_path:
        __pyx_t_13 = (__pyx_v_is_in_path != 0);
        if (__pyx_t_13) {
/* … */
        }
+3017:                     if us[0,ii]<=0 and k<kout:
          __pyx_t_54 = 0;
          __pyx_t_55 = __pyx_v_ii;
          __pyx_t_30 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_54 * __pyx_v_us.strides[0]) )) + __pyx_t_55)) ))) <= 0.0) != 0);
          if (__pyx_t_30) {
          } else {
            __pyx_t_13 = __pyx_t_30;
            goto __pyx_L24_bool_binop_done;
          }
          __pyx_t_23 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3017, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __pyx_t_18 = PyObject_RichCompare(__pyx_v_k, __pyx_t_23, Py_LT); __Pyx_XGOTREF(__pyx_t_18); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3017, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3017, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_13 = __pyx_t_30;
          __pyx_L24_bool_binop_done:;
          if (__pyx_t_13) {
/* … */
            goto __pyx_L23;
          }
+3018:                         kout = k
            __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3018, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_5;
+3019:                         indout = -1
            __pyx_v_indout = -1;
+3020:                         Done = 1
            __pyx_v_Done = 1;
+3021:                     elif us[0,ii]>=0 and k<min(kin,kout):
          __pyx_t_56 = 0;
          __pyx_t_57 = __pyx_v_ii;
          __pyx_t_30 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_56 * __pyx_v_us.strides[0]) )) + __pyx_t_57)) ))) >= 0.0) != 0);
          if (__pyx_t_30) {
          } else {
            __pyx_t_13 = __pyx_t_30;
            goto __pyx_L26_bool_binop_done;
          }
          __pyx_t_5 = __pyx_v_kout;
          __pyx_t_39 = __pyx_v_kin;
          if (((__pyx_t_5 < __pyx_t_39) != 0)) {
            __pyx_t_4 = __pyx_t_5;
          } else {
            __pyx_t_4 = __pyx_t_39;
          }
          __pyx_t_18 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3021, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_23 = PyObject_RichCompare(__pyx_v_k, __pyx_t_18, Py_LT); __Pyx_XGOTREF(__pyx_t_23); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3021, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_23); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3021, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_t_13 = __pyx_t_30;
          __pyx_L26_bool_binop_done:;
          if (__pyx_t_13) {
/* … */
          }
          __pyx_L23:;
+3022:                         kin = k
            __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3022, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_4;
+3023:                         indin = -1
            __pyx_v_indin = -1;
 3024:             # Second face
+3025:             k = -(Ds[0,ii]-L1)/us[0,ii]
      __pyx_t_58 = 0;
      __pyx_t_59 = __pyx_v_ii;
      __pyx_t_60 = 0;
      __pyx_t_61 = __pyx_v_ii;
      __pyx_t_23 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_58 * __pyx_v_Ds.strides[0]) )) + __pyx_t_59)) ))) - __pyx_v_L1)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_60 * __pyx_v_us.strides[0]) )) + __pyx_t_61)) ))))); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_23);
      __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_23);
      __pyx_t_23 = 0;
 3026:             # Only if on good side of semi-line
+3027:             if k>=0.:
      __pyx_t_23 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_23); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3027, __pyx_L1_error)
      __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_23); if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3027, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
      if (__pyx_t_13) {
/* … */
      }
 3028:                 # Only if inside VPoly
+3029:                 is_in_path = is_point_in_path(Ns, polyx_tab, polyy_tab,
        __pyx_v_is_in_path = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_Ns, __pyx_v_polyx_tab, __pyx_v_polyy_tab, __pyx_t_4, __pyx_t_5);
+3030:                                               Ds[1,ii]+k*us[1,ii],
        __pyx_t_62 = 1;
        __pyx_t_63 = __pyx_v_ii;
        __pyx_t_23 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_62 * __pyx_v_Ds.strides[0]) )) + __pyx_t_63)) )))); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __pyx_t_64 = 1;
        __pyx_t_65 = __pyx_v_ii;
        __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_64 * __pyx_v_us.strides[0]) )) + __pyx_t_65)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_29 = PyNumber_Multiply(__pyx_v_k, __pyx_t_18); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = PyNumber_Add(__pyx_t_23, __pyx_t_29); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
        __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_18); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3030, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3031:                                               Ds[2,ii]+k*us[2,ii])
        __pyx_t_66 = 2;
        __pyx_t_67 = __pyx_v_ii;
        __pyx_t_18 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_66 * __pyx_v_Ds.strides[0]) )) + __pyx_t_67)) )))); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3031, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_68 = 2;
        __pyx_t_69 = __pyx_v_ii;
        __pyx_t_29 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_68 * __pyx_v_us.strides[0]) )) + __pyx_t_69)) )))); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3031, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __pyx_t_23 = PyNumber_Multiply(__pyx_v_k, __pyx_t_29); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3031, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_23);
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
        __pyx_t_29 = PyNumber_Add(__pyx_t_18, __pyx_t_23); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3031, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_29);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_29); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3031, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
+3032:                 if is_in_path:
        __pyx_t_13 = (__pyx_v_is_in_path != 0);
        if (__pyx_t_13) {
/* … */
        }
+3033:                     if us[0,ii]>=0 and k<kout:
          __pyx_t_70 = 0;
          __pyx_t_71 = __pyx_v_ii;
          __pyx_t_30 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_70 * __pyx_v_us.strides[0]) )) + __pyx_t_71)) ))) >= 0.0) != 0);
          if (__pyx_t_30) {
          } else {
            __pyx_t_13 = __pyx_t_30;
            goto __pyx_L31_bool_binop_done;
          }
          __pyx_t_29 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3033, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_29);
          __pyx_t_23 = PyObject_RichCompare(__pyx_v_k, __pyx_t_29, Py_LT); __Pyx_XGOTREF(__pyx_t_23); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3033, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_23); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3033, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_t_13 = __pyx_t_30;
          __pyx_L31_bool_binop_done:;
          if (__pyx_t_13) {
/* … */
            goto __pyx_L30;
          }
+3034:                         kout = k
            __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_5 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3034, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_5;
+3035:                         indout = -2
            __pyx_v_indout = -2;
+3036:                         Done = 1
            __pyx_v_Done = 1;
+3037:                     elif us[0,ii]<=0 and k<min(kin,kout):
          __pyx_t_72 = 0;
          __pyx_t_73 = __pyx_v_ii;
          __pyx_t_30 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_72 * __pyx_v_us.strides[0]) )) + __pyx_t_73)) ))) <= 0.0) != 0);
          if (__pyx_t_30) {
          } else {
            __pyx_t_13 = __pyx_t_30;
            goto __pyx_L33_bool_binop_done;
          }
          __pyx_t_5 = __pyx_v_kout;
          __pyx_t_4 = __pyx_v_kin;
          if (((__pyx_t_5 < __pyx_t_4) != 0)) {
            __pyx_t_39 = __pyx_t_5;
          } else {
            __pyx_t_39 = __pyx_t_4;
          }
          __pyx_t_23 = PyFloat_FromDouble(__pyx_t_39); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 3037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_23);
          __pyx_t_29 = PyObject_RichCompare(__pyx_v_k, __pyx_t_23, Py_LT); __Pyx_XGOTREF(__pyx_t_29); if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3037, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
          __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_29); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3037, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
          __pyx_t_13 = __pyx_t_30;
          __pyx_L33_bool_binop_done:;
          if (__pyx_t_13) {
/* … */
          }
          __pyx_L30:;
+3038:                         kin = k
            __pyx_t_39 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_39 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3038, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_39;
+3039:                         indin = -2
            __pyx_v_indin = -2;
 3040:         # == Analyzing if there was impact ====================================
+3041:         if Done==1:
    __pyx_t_13 = ((__pyx_v_Done == 1) != 0);
    if (__pyx_t_13) {
/* … */
    }
  }
+3042:             kout_tab[ii] = kout
      (__pyx_v_kout_tab[__pyx_v_ii]) = __pyx_v_kout;
+3043:             if kin<kin_tab[ii]:
      __pyx_t_13 = ((__pyx_v_kin < (__pyx_v_kin_tab[__pyx_v_ii])) != 0);
      if (__pyx_t_13) {
/* … */
      }
+3044:                 kin_tab[ii] = kin
        (__pyx_v_kin_tab[__pyx_v_ii]) = __pyx_v_kin;
+3045:     return
  goto __pyx_L0;
 3046: 
 3047: # ------------------------------------------------------------------
 3048: 
+3049: cdef inline bint comp_inter_los_vpoly(const double[3] ray_orig,
static CYTHON_INLINE int __pyx_f_4tofu_4geom_5_GG03_comp_inter_los_vpoly(double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, double const *__pyx_v_lpolyx, double const *__pyx_v_lpolyy, double const *__pyx_v_normx, double const *__pyx_v_normy, int const __pyx_v_nvert, int const __pyx_v_lim_is_none, double const __pyx_v_lim_min, double const __pyx_v_lim_max, int const __pyx_v_forbidbis, double const __pyx_v_upscaDp, double const __pyx_v_upar2, double const __pyx_v_dpar2, double const __pyx_v_invuz, double const __pyx_v_s1x, double const __pyx_v_s1y, double const __pyx_v_s2x, double const __pyx_v_s2y, double const __pyx_v_crit2, CYTHON_UNUSED double const __pyx_v_eps_uz, double const __pyx_v_eps_vz, double const __pyx_v_eps_a, double const __pyx_v_eps_b, double const __pyx_v_eps_pln, int const __pyx_v_is_in_struct, double *__pyx_v_kpin_loc, double *__pyx_v_kpout_loc, int *__pyx_v_ind_loc, double *__pyx_v_vperpin, struct __pyx_opt_args_4tofu_4geom_5_GG03_comp_inter_los_vpoly *__pyx_optional_args) {
  int __pyx_v_jj;
  int __pyx_v_done;
  int __pyx_v_indin;
  int __pyx_v_indout;
  int __pyx_v_inter_bbox;
  double __pyx_v_kout;
  double __pyx_v_kin;
  double __pyx_v_res_kin;
  double __pyx_v_res_kout;
  double __pyx_v_sca;
  double __pyx_v_sca0;
  double __pyx_v_sca1;
  double __pyx_v_sca2;
  double __pyx_v_q;
  double __pyx_v_coeff;
  double __pyx_v_delta;
  double __pyx_v_sqd;
  double __pyx_v_k;
  double __pyx_v_sol0;
  double __pyx_v_sol1;
  double __pyx_v_phi;
  double __pyx_v_v0;
  double __pyx_v_v1;
  double __pyx_v_val_a;
  double __pyx_v_val_b;
  double __pyx_v_ephi_in0;
  double __pyx_v_ephi_in1;
  double __pyx_v_sout1;
  double __pyx_v_sout0;
  double __pyx_v_sin1;
  double __pyx_v_sin0;
  double __pyx_v_invupar2;
  double __pyx_v_cosl0;
  double __pyx_v_cosl1;
  double __pyx_v_sinl0;
  double __pyx_v_sinl1;
  int __pyx_r;
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_comp_inter_los_vpoly {
  int __pyx_n;
  int debug_plot;
};
 3050:                                       const double[3] ray_vdir,
 3051:                                       const double* lpolyx,
 3052:                                       const double* lpolyy,
 3053:                                       const double* normx,
 3054:                                       const double* normy,
 3055:                                       const int nvert,
 3056:                                       const bint lim_is_none,
 3057:                                       const double lim_min,
 3058:                                       const double lim_max,
 3059:                                       const bint forbidbis,
 3060:                                       const double upscaDp, const double upar2,
 3061:                                       const double dpar2, const double invuz,
 3062:                                       const double s1x,   const double s1y,
 3063:                                       const double s2x, const double s2y,
 3064:                                       const double crit2, const double eps_uz,
 3065:                                       const double eps_vz, const double eps_a,
 3066:                                       const double eps_b, const double eps_pln,
 3067:                                       const bint is_in_struct,
 3068:                                       double[1] kpin_loc, double[1] kpout_loc,
 3069:                                       int[1] ind_loc, double[3] vperpin,
 3070:                                       bint debug_plot=False) nogil:
 3071:     """
 3072:     Computes the entry and exit point of ONE provided LOS/rays for a single
 3073:     structure that can be of type "OUT" (is_out_struct=True) or "IN"
 3074:     (is_out_struct=False). An "OUT" structure cannot be penetrated whereas an
 3075:     "IN" structure can. The latter is typically a vessel and are toroidally
 3076:     continous. If a structure is limited we can determine the number of limits
 3077:     and the limits itself. For optimization reasons we will also pass the
 3078:     bounding box limits. And the information of the last intersected point, if
 3079:     any.
 3080: 
 3081:     Params
 3082:     ======
 3083:     ray_vdir : (3) double array
 3084:        LOS normalized direction vector
 3085:     ray_orig : (3) double array
 3086:        LOS origin points coordinates
 3087:     lpolyx : (ntotnvert)
 3088:        List of "x" coordinates of the polygon's vertices of the structures on
 3089:        the poloidal plane
 3090:     lpolyy : (ntotnvert)
 3091:        List of "y" coordinates of the polygon's vertices of the structures on
 3092:        the poloidal plane
 3093:     normx : (2, num_vertex-1) double array
 3094:        List of "x" coordinates of the normal vectors going "inwards" of the
 3095:         edges of the Polygon defined by lpolyx/y
 3096:     normy : (2, num_vertex-1) double array
 3097:        List of "y" coordinates of the normal vectors going "inwards" of the
 3098:         edges of the Polygon defined by lpolyxy
 3099:     nvert : int
 3100:        Number of vertices on the polygon
 3101:     lim_is_none : bint
 3102:        Bool to know if the structures (or the vessel) is limited or not.
 3103:     lim_min : double
 3104:        Minimum angle where the structure lives. If the structure
 3105:        is toroidally continous then lim_min = 0
 3106:     lim_max : double
 3107:        Maximum angle where the structure lives. If the structure
 3108:        is toroidally continous then lim_min = 0
 3109:     forbidbis: bint
 3110:        Should we forbid values behind vissible radius for each LOS ?
 3111:     upscaDp: double
 3112:        Scalar product between LOS' origin and direction
 3113:     upar2 : double
 3114:        Norm direction LOS
 3115:     dpar2 : double
 3116:        Norm origin LOS
 3117:     invuz : double
 3118:        Inverse of 3rd component of direction. ie. if direction is (ux, uy, uz)
 3119:        then invuz = 1/uz
 3120:     s1x, s1y, s2x, s2y : double
 3121:        Compute coordinates of the 2 points where the tangents touch the inner
 3122:        circle of the Tore, only needed if forbidbis = 0
 3123:     crit2 : double
 3124:        Critical value to evaluate for each LOS if horizontal or not
 3125:     eps<val> : double
 3126:        Small value, acceptance of error
 3127:     is_in_struct : bint
 3128:        Bool to determine if the structure is "OUT" or "IN". An "OUT" structure
 3129:        cannot be penetrated whereas an "IN" structure can. The latter is
 3130:        typically a vessel and are toroidally continous.
 3131:     kpout_loc : double array <INOUT>
 3132:        Coefficient of exit (kout) of the last point of intersection for the LOS
 3133:        with the structure or vessel
 3134:     kpin_loc : double array <INOUT>
 3135:        Coefficient of exit (kin) of the last point of intersection for the LOS
 3136:        with the structure or vessel
 3137:     vperpin : (3) double array <INOUT>
 3138:        Coordinates of the normal vector of impact of the LOS (0 if none)
 3139:     Return
 3140:     ======
 3141:     bool : If true, there was in impact
 3142:            If false, no intersection between LOS and structure
 3143:     """
 3144:     cdef int jj
+3145:     cdef int done=0
  __pyx_v_done = 0;
+3146:     cdef int indin=0
  __pyx_v_indin = 0;
+3147:     cdef int indout=0
  __pyx_v_indout = 0;
 3148:     cdef bint inter_bbox
 3149:     cdef double kout, kin
+3150:     cdef double res_kin = kpin_loc[0]
  __pyx_v_res_kin = (__pyx_v_kpin_loc[0]);
+3151:     cdef double res_kout = kpout_loc[0]
  __pyx_v_res_kout = (__pyx_v_kpout_loc[0]);
+3152:     cdef double sca=0., sca0=0., sca1=0., sca2=0.
  __pyx_v_sca = 0.;
  __pyx_v_sca0 = 0.;
  __pyx_v_sca1 = 0.;
  __pyx_v_sca2 = 0.;
+3153:     cdef double q, coeff, delta, sqd, k, sol0, sol1, phi=0.
  __pyx_v_phi = 0.;
 3154:     cdef double v0, v1, val_a, val_b, ephi_in0, ephi_in1
 3155:     cdef double sout1, sout0
 3156:     cdef double sin1, sin0
 3157:     cdef double invupar2
 3158:     cdef double cosl0, cosl1, sinl0, sinl1
 3159:     cdef double[3] opp_dir
 3160: 
 3161:     # -- Computing some seful values -------------------------------------------
+3162:     cosl0 = Ccos(lim_min)
  __pyx_v_cosl0 = cos(__pyx_v_lim_min);
+3163:     cosl1 = Ccos(lim_max)
  __pyx_v_cosl1 = cos(__pyx_v_lim_max);
+3164:     sinl0 = Csin(lim_min)
  __pyx_v_sinl0 = sin(__pyx_v_lim_min);
+3165:     sinl1 = Csin(lim_max)
  __pyx_v_sinl1 = sin(__pyx_v_lim_max);
+3166:     invupar2 = 1./upar2
  __pyx_v_invupar2 = (1. / __pyx_v_upar2);
 3167:     # == Compute all solutions =================================================
 3168:     # Set tolerance value for ray_vdir[2,ii]
 3169:     # eps_uz is the tolerated DZ across 20m (max Tokamak size)
+3170:     kout, kin, done = 1.e12, 1.e12, 0
  __pyx_t_1 = 1.e12;
  __pyx_t_2 = 1.e12;
  __pyx_t_3 = 0;
  __pyx_v_kout = __pyx_t_1;
  __pyx_v_kin = __pyx_t_2;
  __pyx_v_done = __pyx_t_3;
+3171:     if ray_vdir[2] * ray_vdir[2] < crit2:
  __pyx_t_4 = ((((__pyx_v_ray_vdir[2]) * (__pyx_v_ray_vdir[2])) < __pyx_v_crit2) != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
 3172:         # -- Case with horizontal semi-line ------------------------------------
+3173:         for jj in range(nvert):
    __pyx_t_3 = __pyx_v_nvert;
    __pyx_t_5 = __pyx_t_3;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_jj = __pyx_t_6;
 3174:             # Solutions exist only in the case with non-horizontal
 3175:             # segment (i.e.: cone, not plane)
+3176:             if (lpolyy[jj+1] - lpolyy[jj])**2 > eps_vz * eps_vz:
      __pyx_t_4 = ((pow(((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj])), 2.0) > (__pyx_v_eps_vz * __pyx_v_eps_vz)) != 0);
      if (__pyx_t_4) {
/* … */
      }
    }
+3177:                 q = (ray_orig[2] - lpolyy[jj]) / (lpolyy[jj+1] - lpolyy[jj])
        __pyx_v_q = (((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj])) / ((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj])));
 3178:                 # The intersection must stand on the segment
+3179:                 if q>=0 and q<1:
        __pyx_t_7 = ((__pyx_v_q >= 0.0) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_4 = __pyx_t_7;
          goto __pyx_L8_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_q < 1.0) != 0);
        __pyx_t_4 = __pyx_t_7;
        __pyx_L8_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
        }
 3180:                     coeff = q * q * (lpolyx[jj+1]-lpolyx[jj])**2 + \
+3181:                         2. * q * lpolyx[jj] * (lpolyx[jj+1] - lpolyx[jj]) + \
          __pyx_v_coeff = ((((__pyx_v_q * __pyx_v_q) * pow(((__pyx_v_lpolyx[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyx[__pyx_v_jj])), 2.0)) + (((2. * __pyx_v_q) * (__pyx_v_lpolyx[__pyx_v_jj])) * ((__pyx_v_lpolyx[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyx[__pyx_v_jj])))) + ((__pyx_v_lpolyx[__pyx_v_jj]) * (__pyx_v_lpolyx[__pyx_v_jj])));
 3182:                         lpolyx[jj] * lpolyx[jj]
+3183:                     delta = upscaDp * upscaDp - upar2 * (dpar2 - coeff)
          __pyx_v_delta = ((__pyx_v_upscaDp * __pyx_v_upscaDp) - (__pyx_v_upar2 * (__pyx_v_dpar2 - __pyx_v_coeff)));
+3184:                     if delta>0.:
          __pyx_t_4 = ((__pyx_v_delta > 0.) != 0);
          if (__pyx_t_4) {
/* … */
          }
+3185:                         sqd = Csqrt(delta)
            __pyx_v_sqd = sqrt(__pyx_v_delta);
 3186:                         # The intersection must be on the semi-line (i.e.: k>=0)
 3187:                         # First solution
+3188:                         if -upscaDp - sqd >= 0:
            __pyx_t_4 = ((((-__pyx_v_upscaDp) - __pyx_v_sqd) >= 0.0) != 0);
            if (__pyx_t_4) {
/* … */
            }
+3189:                             k = (-upscaDp - sqd) * invupar2
              __pyx_v_k = (((-__pyx_v_upscaDp) - __pyx_v_sqd) * __pyx_v_invupar2);
+3190:                             sol0 = ray_orig[0] + k * ray_vdir[0]
              __pyx_v_sol0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+3191:                             sol1 = ray_orig[1] + k * ray_vdir[1]
              __pyx_v_sol1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+3192:                             if forbidbis:
              __pyx_t_4 = (__pyx_v_forbidbis != 0);
              if (__pyx_t_4) {
/* … */
              }
+3193:                                 sca0 = (sol0-s1x)*ray_orig[0] + \
                __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_s1x) * (__pyx_v_ray_orig[0])) + ((__pyx_v_sol1 - __pyx_v_s1y) * (__pyx_v_ray_orig[1])));
 3194:                                        (sol1-s1y)*ray_orig[1]
+3195:                                 sca1 = (sol0-s1x)*s1x + (sol1-s1y)*s1y
                __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_s1x) * __pyx_v_s1x) + ((__pyx_v_sol1 - __pyx_v_s1y) * __pyx_v_s1y));
+3196:                                 sca2 = (sol0-s2x)*s2x + (sol1-s2y)*s2y
                __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_s2x) * __pyx_v_s2x) + ((__pyx_v_sol1 - __pyx_v_s2y) * __pyx_v_s2y));
+3197:                             if not forbidbis or (forbidbis and not
              __pyx_t_7 = ((!(__pyx_v_forbidbis != 0)) != 0);
              if (!__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L14_bool_binop_done;
              }
              __pyx_t_7 = (__pyx_v_forbidbis != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L14_bool_binop_done;
              }
/* … */
              __pyx_t_8 = ((!__pyx_t_7) != 0);
              __pyx_t_4 = __pyx_t_8;
              __pyx_L14_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
              }
+3198:                                                  (sca0<0 and sca1<0 and
              __pyx_t_8 = ((__pyx_v_sca0 < 0.0) != 0);
              if (__pyx_t_8) {
              } else {
                __pyx_t_7 = __pyx_t_8;
                goto __pyx_L17_bool_binop_done;
              }
              __pyx_t_8 = ((__pyx_v_sca1 < 0.0) != 0);
              if (__pyx_t_8) {
              } else {
                __pyx_t_7 = __pyx_t_8;
                goto __pyx_L17_bool_binop_done;
              }
+3199:                                                   sca2<0)):
              __pyx_t_8 = ((__pyx_v_sca2 < 0.0) != 0);
              __pyx_t_7 = __pyx_t_8;
              __pyx_L17_bool_binop_done:;
 3200:                                 # Get the normalized perpendicular vector
 3201:                                 # at intersection
+3202:                                 phi = Catan2(sol1, sol0)
                __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
 3203:                                 # Check sol inside the Lim
+3204:                                 if lim_is_none or (not lim_is_none and
                __pyx_t_8 = (__pyx_v_lim_is_none != 0);
                if (!__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L21_bool_binop_done;
                }
                __pyx_t_8 = ((!(__pyx_v_lim_is_none != 0)) != 0);
                if (__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L21_bool_binop_done;
                }
/* … */
                if (__pyx_t_4) {
/* … */
                }
+3205:                                                    ((lim_min<lim_max and
                __pyx_t_8 = ((__pyx_v_lim_min < __pyx_v_lim_max) != 0);
                if (!__pyx_t_8) {
                  goto __pyx_L24_next_or;
                } else {
                }
+3206:                                                      lim_min<=phi and
                __pyx_t_8 = ((__pyx_v_lim_min <= __pyx_v_phi) != 0);
                if (!__pyx_t_8) {
                  goto __pyx_L24_next_or;
                } else {
                }
+3207:                                                      phi<=lim_max)
                __pyx_t_8 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
                if (!__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L21_bool_binop_done;
                }
                __pyx_L24_next_or:;
+3208:                                                     or (lim_min>lim_max and
                __pyx_t_8 = ((__pyx_v_lim_min > __pyx_v_lim_max) != 0);
                if (__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L21_bool_binop_done;
                }
+3209:                                                         (phi>=lim_min or
                __pyx_t_8 = ((__pyx_v_phi >= __pyx_v_lim_min) != 0);
                if (!__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L21_bool_binop_done;
                }
+3210:                                                          phi<=lim_max)))):
                __pyx_t_8 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
                __pyx_t_4 = __pyx_t_8;
                __pyx_L21_bool_binop_done:;
 3211:                                     # Get the scalar product to determine
 3212:                                     # entry or exit point
 3213:                                     sca = Ccos(phi)*normx[jj]*ray_vdir[0] + \
+3214:                                           Csin(phi)*normx[jj]*ray_vdir[1] + \
                  __pyx_v_sca = ((((cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[0])) + ((sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[1]))) + ((__pyx_v_normy[__pyx_v_jj]) * (__pyx_v_ray_vdir[2])));
 3215:                                           normy[jj]*ray_vdir[2]
+3216:                                     if sca<=0 and k<kout:
                  __pyx_t_8 = ((__pyx_v_sca <= 0.0) != 0);
                  if (__pyx_t_8) {
                  } else {
                    __pyx_t_4 = __pyx_t_8;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_t_8 = ((__pyx_v_k < __pyx_v_kout) != 0);
                  __pyx_t_4 = __pyx_t_8;
                  __pyx_L30_bool_binop_done:;
                  if (__pyx_t_4) {
/* … */
                    goto __pyx_L29;
                  }
+3217:                                         kout = k
                    __pyx_v_kout = __pyx_v_k;
+3218:                                         done = 1
                    __pyx_v_done = 1;
+3219:                                         indout = jj
                    __pyx_v_indout = __pyx_v_jj;
+3220:                                     elif sca>=0 and k<min(kin,kout):
                  __pyx_t_8 = ((__pyx_v_sca >= 0.0) != 0);
                  if (__pyx_t_8) {
                  } else {
                    __pyx_t_4 = __pyx_t_8;
                    goto __pyx_L32_bool_binop_done;
                  }
                  __pyx_t_2 = __pyx_v_kout;
                  __pyx_t_1 = __pyx_v_kin;
                  if (((__pyx_t_2 < __pyx_t_1) != 0)) {
                    __pyx_t_9 = __pyx_t_2;
                  } else {
                    __pyx_t_9 = __pyx_t_1;
                  }
                  __pyx_t_8 = ((__pyx_v_k < __pyx_t_9) != 0);
                  __pyx_t_4 = __pyx_t_8;
                  __pyx_L32_bool_binop_done:;
                  if (__pyx_t_4) {
/* … */
                  }
                  __pyx_L29:;
+3221:                                         kin = k
                    __pyx_v_kin = __pyx_v_k;
+3222:                                         indin = jj
                    __pyx_v_indin = __pyx_v_jj;
 3223: 
 3224:                         # Second solution
+3225:                         if -upscaDp + sqd >=0:
            __pyx_t_4 = ((((-__pyx_v_upscaDp) + __pyx_v_sqd) >= 0.0) != 0);
            if (__pyx_t_4) {
/* … */
            }
+3226:                             k = (-upscaDp + sqd)*invupar2
              __pyx_v_k = (((-__pyx_v_upscaDp) + __pyx_v_sqd) * __pyx_v_invupar2);
+3227:                             sol0 = ray_orig[0] + k * ray_vdir[0]
              __pyx_v_sol0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+3228:                             sol1 = ray_orig[1] + k * ray_vdir[1]
              __pyx_v_sol1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+3229:                             if forbidbis:
              __pyx_t_4 = (__pyx_v_forbidbis != 0);
              if (__pyx_t_4) {
/* … */
              }
+3230:                                 sca0 = (sol0-s1x) * ray_orig[0] + \
                __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_s1x) * (__pyx_v_ray_orig[0])) + ((__pyx_v_sol1 - __pyx_v_s1y) * (__pyx_v_ray_orig[1])));
 3231:                                        (sol1-s1y) * ray_orig[1]
+3232:                                 sca1 = (sol0-s1x) * s1x + (sol1-s1y) * s1y
                __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_s1x) * __pyx_v_s1x) + ((__pyx_v_sol1 - __pyx_v_s1y) * __pyx_v_s1y));
+3233:                                 sca2 = (sol0-s2x) * s2x + (sol1-s2y) * s2y
                __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_s2x) * __pyx_v_s2x) + ((__pyx_v_sol1 - __pyx_v_s2y) * __pyx_v_s2y));
+3234:                             if not forbidbis or (forbidbis and not
              __pyx_t_8 = ((!(__pyx_v_forbidbis != 0)) != 0);
              if (!__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L37_bool_binop_done;
              }
              __pyx_t_8 = (__pyx_v_forbidbis != 0);
              if (__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L37_bool_binop_done;
              }
/* … */
              __pyx_t_7 = ((!__pyx_t_8) != 0);
              __pyx_t_4 = __pyx_t_7;
              __pyx_L37_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
              }
+3235:                                                  (sca0<0 and sca1<0 and
              __pyx_t_7 = ((__pyx_v_sca0 < 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_8 = __pyx_t_7;
                goto __pyx_L40_bool_binop_done;
              }
              __pyx_t_7 = ((__pyx_v_sca1 < 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_8 = __pyx_t_7;
                goto __pyx_L40_bool_binop_done;
              }
+3236:                                                   sca2<0)):
              __pyx_t_7 = ((__pyx_v_sca2 < 0.0) != 0);
              __pyx_t_8 = __pyx_t_7;
              __pyx_L40_bool_binop_done:;
 3237:                                 # Get the normalized perpendicular vector
 3238:                                 # at intersection
+3239:                                 phi = Catan2(sol1,sol0)
                __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+3240:                                 if lim_is_none or (not lim_is_none and
                __pyx_t_7 = (__pyx_v_lim_is_none != 0);
                if (!__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L44_bool_binop_done;
                }
                __pyx_t_7 = ((!(__pyx_v_lim_is_none != 0)) != 0);
                if (__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L44_bool_binop_done;
                }
/* … */
                if (__pyx_t_4) {
/* … */
                }
+3241:                                                    ((lim_min<lim_max and
                __pyx_t_7 = ((__pyx_v_lim_min < __pyx_v_lim_max) != 0);
                if (!__pyx_t_7) {
                  goto __pyx_L47_next_or;
                } else {
                }
+3242:                                                      lim_min<=phi and
                __pyx_t_7 = ((__pyx_v_lim_min <= __pyx_v_phi) != 0);
                if (!__pyx_t_7) {
                  goto __pyx_L47_next_or;
                } else {
                }
+3243:                                                      phi<=lim_max) or
                __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
                if (!__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L44_bool_binop_done;
                }
                __pyx_L47_next_or:;
+3244:                                                     (lim_min>lim_max and
                __pyx_t_7 = ((__pyx_v_lim_min > __pyx_v_lim_max) != 0);
                if (__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L44_bool_binop_done;
                }
+3245:                                                      (phi>=lim_min or
                __pyx_t_7 = ((__pyx_v_phi >= __pyx_v_lim_min) != 0);
                if (!__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L44_bool_binop_done;
                }
+3246:                                                       phi<=lim_max))
                __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
                __pyx_t_4 = __pyx_t_7;
                __pyx_L44_bool_binop_done:;
 3247:                                                    )):
 3248:                                     # Get the scalar product to determine
 3249:                                     # entry or exit point
 3250:                                     sca = Ccos(phi)*normx[jj]*ray_vdir[0] + \
+3251:                                           Csin(phi)*normx[jj]*ray_vdir[1] + \
                  __pyx_v_sca = ((((cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[0])) + ((sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[1]))) + ((__pyx_v_normy[__pyx_v_jj]) * (__pyx_v_ray_vdir[2])));
 3252:                                           normy[jj]*ray_vdir[2]
+3253:                                     if sca<=0 and k<kout:
                  __pyx_t_7 = ((__pyx_v_sca <= 0.0) != 0);
                  if (__pyx_t_7) {
                  } else {
                    __pyx_t_4 = __pyx_t_7;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_t_7 = ((__pyx_v_k < __pyx_v_kout) != 0);
                  __pyx_t_4 = __pyx_t_7;
                  __pyx_L53_bool_binop_done:;
                  if (__pyx_t_4) {
/* … */
                    goto __pyx_L52;
                  }
+3254:                                         kout = k
                    __pyx_v_kout = __pyx_v_k;
+3255:                                         done = 1
                    __pyx_v_done = 1;
+3256:                                         indout = jj
                    __pyx_v_indout = __pyx_v_jj;
+3257:                                     elif sca>=0 and k<min(kin,kout):
                  __pyx_t_7 = ((__pyx_v_sca >= 0.0) != 0);
                  if (__pyx_t_7) {
                  } else {
                    __pyx_t_4 = __pyx_t_7;
                    goto __pyx_L55_bool_binop_done;
                  }
                  __pyx_t_9 = __pyx_v_kout;
                  __pyx_t_2 = __pyx_v_kin;
                  if (((__pyx_t_9 < __pyx_t_2) != 0)) {
                    __pyx_t_1 = __pyx_t_9;
                  } else {
                    __pyx_t_1 = __pyx_t_2;
                  }
                  __pyx_t_7 = ((__pyx_v_k < __pyx_t_1) != 0);
                  __pyx_t_4 = __pyx_t_7;
                  __pyx_L55_bool_binop_done:;
                  if (__pyx_t_4) {
/* … */
                  }
                  __pyx_L52:;
+3258:                                         kin = k
                    __pyx_v_kin = __pyx_v_k;
+3259:                                         indin = jj
                    __pyx_v_indin = __pyx_v_jj;
 3260:     else:
 3261:         # == More general non-horizontal semi-line case ============================
+3262:         for jj in range(nvert):
  /*else*/ {
    __pyx_t_3 = __pyx_v_nvert;
    __pyx_t_5 = __pyx_t_3;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_jj = __pyx_t_6;
+3263:             v0 = lpolyx[jj+1]-lpolyx[jj]
      __pyx_v_v0 = ((__pyx_v_lpolyx[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyx[__pyx_v_jj]));
+3264:             v1 = lpolyy[jj+1]-lpolyy[jj]
      __pyx_v_v1 = ((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj]));
+3265:             val_a = v0 * v0 - upar2 * v1 * invuz * v1 * invuz
      __pyx_v_val_a = ((__pyx_v_v0 * __pyx_v_v0) - ((((__pyx_v_upar2 * __pyx_v_v1) * __pyx_v_invuz) * __pyx_v_v1) * __pyx_v_invuz));
 3266:             val_b = lpolyx[jj] * v0 + v1 * (ray_orig[2] - lpolyy[jj]) * upar2 *\
+3267:                     invuz * invuz - upscaDp * v1 * invuz
      __pyx_v_val_b = ((((__pyx_v_lpolyx[__pyx_v_jj]) * __pyx_v_v0) + ((((__pyx_v_v1 * ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_upar2) * __pyx_v_invuz) * __pyx_v_invuz)) - ((__pyx_v_upscaDp * __pyx_v_v1) * __pyx_v_invuz));
 3268:             coeff = - upar2 * (ray_orig[2] - lpolyy[jj])**2 * invuz * invuz +\
 3269:                     2. * upscaDp * (ray_orig[2]-lpolyy[jj]) * invuz -\
+3270:                     dpar2 + lpolyx[jj] * lpolyx[jj]
      __pyx_v_coeff = (((((((-__pyx_v_upar2) * pow(((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj])), 2.0)) * __pyx_v_invuz) * __pyx_v_invuz) + (((2. * __pyx_v_upscaDp) * ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz)) - __pyx_v_dpar2) + ((__pyx_v_lpolyx[__pyx_v_jj]) * (__pyx_v_lpolyx[__pyx_v_jj])));
+3271:             if ((val_a * val_a < eps_a * eps_a) and
      __pyx_t_7 = (((__pyx_v_val_a * __pyx_v_val_a) < (__pyx_v_eps_a * __pyx_v_eps_a)) != 0);
      if (__pyx_t_7) {
      } else {
        __pyx_t_4 = __pyx_t_7;
        goto __pyx_L60_bool_binop_done;
      }
/* … */
      if (__pyx_t_4) {
/* … */
        goto __pyx_L59;
      }
+3272:                 (val_b * val_b > eps_b * eps_b)):
      __pyx_t_7 = (((__pyx_v_val_b * __pyx_v_val_b) > (__pyx_v_eps_b * __pyx_v_eps_b)) != 0);
      __pyx_t_4 = __pyx_t_7;
      __pyx_L60_bool_binop_done:;
+3273:                 q = -coeff / (2. * val_b)
        __pyx_v_q = ((-__pyx_v_coeff) / (2. * __pyx_v_val_b));
+3274:                 if q >= 0. and q < 1.:
        __pyx_t_7 = ((__pyx_v_q >= 0.) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_4 = __pyx_t_7;
          goto __pyx_L63_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_q < 1.) != 0);
        __pyx_t_4 = __pyx_t_7;
        __pyx_L63_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
        }
+3275:                     k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
          __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+3276:                     if k >= 0:
          __pyx_t_4 = ((__pyx_v_k >= 0.0) != 0);
          if (__pyx_t_4) {
/* … */
          }
+3277:                         sol0 = ray_orig[0] + k * ray_vdir[0]
            __pyx_v_sol0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+3278:                         sol1 = ray_orig[1] + k * ray_vdir[1]
            __pyx_v_sol1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+3279:                         if forbidbis:
            __pyx_t_4 = (__pyx_v_forbidbis != 0);
            if (__pyx_t_4) {
/* … */
            }
+3280:                             sca0 = (sol0-s1x)*ray_orig[0] + \
              __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_s1x) * (__pyx_v_ray_orig[0])) + ((__pyx_v_sol1 - __pyx_v_s1y) * (__pyx_v_ray_orig[1])));
 3281:                                    (sol1-s1y)*ray_orig[1]
+3282:                             sca1 = (sol0-s1x)*s1x + (sol1-s1y)*s1y
              __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_s1x) * __pyx_v_s1x) + ((__pyx_v_sol1 - __pyx_v_s1y) * __pyx_v_s1y));
+3283:                             sca2 = (sol0-s2x)*s2x + (sol1-s2y)*s2y
              __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_s2x) * __pyx_v_s2x) + ((__pyx_v_sol1 - __pyx_v_s2y) * __pyx_v_s2y));
+3284:                             if sca0<0 and sca1<0 and sca2<0:
              __pyx_t_7 = ((__pyx_v_sca0 < 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L68_bool_binop_done;
              }
              __pyx_t_7 = ((__pyx_v_sca1 < 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L68_bool_binop_done;
              }
              __pyx_t_7 = ((__pyx_v_sca2 < 0.0) != 0);
              __pyx_t_4 = __pyx_t_7;
              __pyx_L68_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
              }
+3285:                                 continue
                goto __pyx_L57_continue;
 3286:                         # Get the normalized perpendicular vect at intersection
+3287:                         phi = Catan2(sol1,sol0)
            __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+3288:                         if lim_is_none or (not lim_is_none and
            __pyx_t_7 = (__pyx_v_lim_is_none != 0);
            if (!__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L72_bool_binop_done;
            }
            __pyx_t_7 = ((!(__pyx_v_lim_is_none != 0)) != 0);
            if (__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L72_bool_binop_done;
            }
/* … */
            if (__pyx_t_4) {
/* … */
            }
+3289:                                            ((lim_min < lim_max and
            __pyx_t_7 = ((__pyx_v_lim_min < __pyx_v_lim_max) != 0);
            if (!__pyx_t_7) {
              goto __pyx_L75_next_or;
            } else {
            }
+3290:                                              lim_min <= phi and
            __pyx_t_7 = ((__pyx_v_lim_min <= __pyx_v_phi) != 0);
            if (!__pyx_t_7) {
              goto __pyx_L75_next_or;
            } else {
            }
+3291:                                              phi <= lim_max) or
            __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
            if (!__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L72_bool_binop_done;
            }
            __pyx_L75_next_or:;
+3292:                                             (lim_min > lim_max and
            __pyx_t_7 = ((__pyx_v_lim_min > __pyx_v_lim_max) != 0);
            if (__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L72_bool_binop_done;
            }
+3293:                                              (phi >= lim_min or
            __pyx_t_7 = ((__pyx_v_phi >= __pyx_v_lim_min) != 0);
            if (!__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L72_bool_binop_done;
            }
+3294:                                               phi <= lim_max)))):
            __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
            __pyx_t_4 = __pyx_t_7;
            __pyx_L72_bool_binop_done:;
 3295:                             # Get the scal prod to determine entry or exit point
 3296:                             sca = Ccos(phi) * normx[jj] * ray_vdir[0] + \
+3297:                                   Csin(phi) * normx[jj] * ray_vdir[1] + \
              __pyx_v_sca = ((((cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[0])) + ((sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[1]))) + ((__pyx_v_normy[__pyx_v_jj]) * (__pyx_v_ray_vdir[2])));
 3298:                                   normy[jj] * ray_vdir[2]
+3299:                             if sca<=0 and k<kout:
              __pyx_t_7 = ((__pyx_v_sca <= 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_t_7 = ((__pyx_v_k < __pyx_v_kout) != 0);
              __pyx_t_4 = __pyx_t_7;
              __pyx_L81_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
                goto __pyx_L80;
              }
+3300:                                 kout = k
                __pyx_v_kout = __pyx_v_k;
+3301:                                 done = 1
                __pyx_v_done = 1;
+3302:                                 indout = jj
                __pyx_v_indout = __pyx_v_jj;
+3303:                             elif sca>=0 and k<min(kin,kout):
              __pyx_t_7 = ((__pyx_v_sca >= 0.0) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L83_bool_binop_done;
              }
              __pyx_t_1 = __pyx_v_kout;
              __pyx_t_9 = __pyx_v_kin;
              if (((__pyx_t_1 < __pyx_t_9) != 0)) {
                __pyx_t_2 = __pyx_t_1;
              } else {
                __pyx_t_2 = __pyx_t_9;
              }
              __pyx_t_7 = ((__pyx_v_k < __pyx_t_2) != 0);
              __pyx_t_4 = __pyx_t_7;
              __pyx_L83_bool_binop_done:;
              if (__pyx_t_4) {
/* … */
              }
              __pyx_L80:;
+3304:                                 kin = k
                __pyx_v_kin = __pyx_v_k;
+3305:                                 indin = jj
                __pyx_v_indin = __pyx_v_jj;
+3306:             elif ((val_a * val_a >= eps_a * eps_a) and
      __pyx_t_7 = (((__pyx_v_val_a * __pyx_v_val_a) >= (__pyx_v_eps_a * __pyx_v_eps_a)) != 0);
      if (__pyx_t_7) {
      } else {
        __pyx_t_4 = __pyx_t_7;
        goto __pyx_L85_bool_binop_done;
      }
/* … */
      if (__pyx_t_4) {
/* … */
      }
      __pyx_L59:;
      __pyx_L57_continue:;
    }
  }
  __pyx_L3:;
+3307:                   (val_b * val_b > val_a * coeff)):
      __pyx_t_7 = (((__pyx_v_val_b * __pyx_v_val_b) > (__pyx_v_val_a * __pyx_v_coeff)) != 0);
      __pyx_t_4 = __pyx_t_7;
      __pyx_L85_bool_binop_done:;
+3308:                 sqd = Csqrt(val_b * val_b - val_a * coeff)
        __pyx_v_sqd = sqrt(((__pyx_v_val_b * __pyx_v_val_b) - (__pyx_v_val_a * __pyx_v_coeff)));
 3309:                 # First solution
+3310:                 q = (-val_b + sqd) / val_a
        __pyx_v_q = (((-__pyx_v_val_b) + __pyx_v_sqd) / __pyx_v_val_a);
+3311:                 if q >= 0. and q < 1.:
        __pyx_t_7 = ((__pyx_v_q >= 0.) != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_4 = __pyx_t_7;
          goto __pyx_L88_bool_binop_done;
        }
        __pyx_t_7 = ((__pyx_v_q < 1.) != 0);
        __pyx_t_4 = __pyx_t_7;
        __pyx_L88_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
        }
+3312:                     k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
          __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+3313:                     if k >= 0.:
          __pyx_t_4 = ((__pyx_v_k >= 0.) != 0);
          if (__pyx_t_4) {
/* … */
          }
+3314:                         sol0 = ray_orig[0] + k * ray_vdir[0]
            __pyx_v_sol0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+3315:                         sol1 = ray_orig[1] + k * ray_vdir[1]
            __pyx_v_sol1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+3316:                         if forbidbis:
            __pyx_t_4 = (__pyx_v_forbidbis != 0);
            if (__pyx_t_4) {
/* … */
            }
+3317:                             sca0 = (sol0-s1x) * ray_orig[0] + \
              __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_s1x) * (__pyx_v_ray_orig[0])) + ((__pyx_v_sol1 - __pyx_v_s1y) * (__pyx_v_ray_orig[1])));
 3318:                                    (sol1-s1y) * ray_orig[1]
+3319:                             sca1 = (sol0-s1x) * s1x + (sol1-s1y) * s1y
              __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_s1x) * __pyx_v_s1x) + ((__pyx_v_sol1 - __pyx_v_s1y) * __pyx_v_s1y));
+3320:                             sca2 = (sol0-s2x) * s2x + (sol1-s2y) * s2y
              __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_s2x) * __pyx_v_s2x) + ((__pyx_v_sol1 - __pyx_v_s2y) * __pyx_v_s2y));
+3321:                         if not forbidbis or (forbidbis and
            __pyx_t_7 = ((!(__pyx_v_forbidbis != 0)) != 0);
            if (!__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L93_bool_binop_done;
            }
            __pyx_t_7 = (__pyx_v_forbidbis != 0);
            if (__pyx_t_7) {
            } else {
              __pyx_t_4 = __pyx_t_7;
              goto __pyx_L93_bool_binop_done;
            }
/* … */
            if (__pyx_t_4) {
/* … */
            }
+3322:                                              not (sca0<0 and sca1<0 and
            __pyx_t_8 = ((__pyx_v_sca0 < 0.0) != 0);
            if (__pyx_t_8) {
            } else {
              __pyx_t_7 = __pyx_t_8;
              goto __pyx_L96_bool_binop_done;
            }
            __pyx_t_8 = ((__pyx_v_sca1 < 0.0) != 0);
            if (__pyx_t_8) {
            } else {
              __pyx_t_7 = __pyx_t_8;
              goto __pyx_L96_bool_binop_done;
            }
/* … */
            __pyx_t_8 = ((!__pyx_t_7) != 0);
            __pyx_t_4 = __pyx_t_8;
            __pyx_L93_bool_binop_done:;
+3323:                                                   sca2<0)):
            __pyx_t_8 = ((__pyx_v_sca2 < 0.0) != 0);
            __pyx_t_7 = __pyx_t_8;
            __pyx_L96_bool_binop_done:;
 3324:                             # Get the normalized perpendicular vector at inter
+3325:                             phi = Catan2(sol1, sol0)
              __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+3326:                             if lim_is_none or (not lim_is_none and
              __pyx_t_8 = (__pyx_v_lim_is_none != 0);
              if (!__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L100_bool_binop_done;
              }
              __pyx_t_8 = ((!(__pyx_v_lim_is_none != 0)) != 0);
              if (__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L100_bool_binop_done;
              }
/* … */
              if (__pyx_t_4) {
/* … */
              }
+3327:                                                ((lim_min < lim_max and
              __pyx_t_8 = ((__pyx_v_lim_min < __pyx_v_lim_max) != 0);
              if (!__pyx_t_8) {
                goto __pyx_L103_next_or;
              } else {
              }
+3328:                                                  lim_min <= phi and
              __pyx_t_8 = ((__pyx_v_lim_min <= __pyx_v_phi) != 0);
              if (!__pyx_t_8) {
                goto __pyx_L103_next_or;
              } else {
              }
+3329:                                                  phi <= lim_max) or
              __pyx_t_8 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
              if (!__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L100_bool_binop_done;
              }
              __pyx_L103_next_or:;
+3330:                                                 (lim_min > lim_max and
              __pyx_t_8 = ((__pyx_v_lim_min > __pyx_v_lim_max) != 0);
              if (__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L100_bool_binop_done;
              }
+3331:                                                  (phi >= lim_min or
              __pyx_t_8 = ((__pyx_v_phi >= __pyx_v_lim_min) != 0);
              if (!__pyx_t_8) {
              } else {
                __pyx_t_4 = __pyx_t_8;
                goto __pyx_L100_bool_binop_done;
              }
+3332:                                                   phi <= lim_max)))):
              __pyx_t_8 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
              __pyx_t_4 = __pyx_t_8;
              __pyx_L100_bool_binop_done:;
 3333:                                 # Get the scal prod to determine in or out point
 3334:                                 sca = Ccos(phi) * normx[jj] * ray_vdir[0] + \
+3335:                                       Csin(phi) * normx[jj] * ray_vdir[1] + \
                __pyx_v_sca = ((((cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[0])) + ((sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[1]))) + ((__pyx_v_normy[__pyx_v_jj]) * (__pyx_v_ray_vdir[2])));
 3336:                                       normy[jj] * ray_vdir[2]
+3337:                                 if sca<=0 and k<kout:
                __pyx_t_8 = ((__pyx_v_sca <= 0.0) != 0);
                if (__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_t_8 = ((__pyx_v_k < __pyx_v_kout) != 0);
                __pyx_t_4 = __pyx_t_8;
                __pyx_L109_bool_binop_done:;
                if (__pyx_t_4) {
/* … */
                  goto __pyx_L108;
                }
+3338:                                     kout = k
                  __pyx_v_kout = __pyx_v_k;
+3339:                                     done = 1
                  __pyx_v_done = 1;
+3340:                                     indout = jj
                  __pyx_v_indout = __pyx_v_jj;
+3341:                                 elif sca>=0 and k<min(kin,kout):
                __pyx_t_8 = ((__pyx_v_sca >= 0.0) != 0);
                if (__pyx_t_8) {
                } else {
                  __pyx_t_4 = __pyx_t_8;
                  goto __pyx_L111_bool_binop_done;
                }
                __pyx_t_2 = __pyx_v_kout;
                __pyx_t_1 = __pyx_v_kin;
                if (((__pyx_t_2 < __pyx_t_1) != 0)) {
                  __pyx_t_9 = __pyx_t_2;
                } else {
                  __pyx_t_9 = __pyx_t_1;
                }
                __pyx_t_8 = ((__pyx_v_k < __pyx_t_9) != 0);
                __pyx_t_4 = __pyx_t_8;
                __pyx_L111_bool_binop_done:;
                if (__pyx_t_4) {
/* … */
                }
                __pyx_L108:;
+3342:                                     kin = k
                  __pyx_v_kin = __pyx_v_k;
+3343:                                     indin = jj
                  __pyx_v_indin = __pyx_v_jj;
 3344: 
 3345:                 # == Second solution ===========================================
+3346:                 q = (-val_b - sqd) / val_a
        __pyx_v_q = (((-__pyx_v_val_b) - __pyx_v_sqd) / __pyx_v_val_a);
+3347:                 if q >= 0. and q < 1.:
        __pyx_t_8 = ((__pyx_v_q >= 0.) != 0);
        if (__pyx_t_8) {
        } else {
          __pyx_t_4 = __pyx_t_8;
          goto __pyx_L114_bool_binop_done;
        }
        __pyx_t_8 = ((__pyx_v_q < 1.) != 0);
        __pyx_t_4 = __pyx_t_8;
        __pyx_L114_bool_binop_done:;
        if (__pyx_t_4) {
/* … */
        }
+3348:                     k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
          __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+3349:                     if k>=0.:
          __pyx_t_4 = ((__pyx_v_k >= 0.) != 0);
          if (__pyx_t_4) {
/* … */
          }
+3350:                         sol0 = ray_orig[0] + k * ray_vdir[0]
            __pyx_v_sol0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+3351:                         sol1 = ray_orig[1] + k * ray_vdir[1]
            __pyx_v_sol1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+3352:                         if forbidbis:
            __pyx_t_4 = (__pyx_v_forbidbis != 0);
            if (__pyx_t_4) {
/* … */
            }
+3353:                             sca0 = (sol0-s1x) * ray_orig[0] + \
              __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_s1x) * (__pyx_v_ray_orig[0])) + ((__pyx_v_sol1 - __pyx_v_s1y) * (__pyx_v_ray_orig[1])));
 3354:                                    (sol1-s1y) * ray_orig[1]
+3355:                             sca1 = (sol0-s1x) * s1x + (sol1-s1y) * s1y
              __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_s1x) * __pyx_v_s1x) + ((__pyx_v_sol1 - __pyx_v_s1y) * __pyx_v_s1y));
+3356:                             sca2 = (sol0-s2x) * s2x + (sol1-s2y) * s2y
              __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_s2x) * __pyx_v_s2x) + ((__pyx_v_sol1 - __pyx_v_s2y) * __pyx_v_s2y));
+3357:                         if not forbidbis or (forbidbis and
            __pyx_t_8 = ((!(__pyx_v_forbidbis != 0)) != 0);
            if (!__pyx_t_8) {
            } else {
              __pyx_t_4 = __pyx_t_8;
              goto __pyx_L119_bool_binop_done;
            }
            __pyx_t_8 = (__pyx_v_forbidbis != 0);
            if (__pyx_t_8) {
            } else {
              __pyx_t_4 = __pyx_t_8;
              goto __pyx_L119_bool_binop_done;
            }
/* … */
            if (__pyx_t_4) {
/* … */
            }
+3358:                                              not (sca0<0 and sca1<0 and
            __pyx_t_7 = ((__pyx_v_sca0 < 0.0) != 0);
            if (__pyx_t_7) {
            } else {
              __pyx_t_8 = __pyx_t_7;
              goto __pyx_L122_bool_binop_done;
            }
            __pyx_t_7 = ((__pyx_v_sca1 < 0.0) != 0);
            if (__pyx_t_7) {
            } else {
              __pyx_t_8 = __pyx_t_7;
              goto __pyx_L122_bool_binop_done;
            }
/* … */
            __pyx_t_7 = ((!__pyx_t_8) != 0);
            __pyx_t_4 = __pyx_t_7;
            __pyx_L119_bool_binop_done:;
+3359:                                                   sca2<0)):
            __pyx_t_7 = ((__pyx_v_sca2 < 0.0) != 0);
            __pyx_t_8 = __pyx_t_7;
            __pyx_L122_bool_binop_done:;
 3360:                             # Get the normalized perpendicular vector at inter
+3361:                             phi = Catan2(sol1,sol0)
              __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+3362:                             if lim_is_none or (not lim_is_none and
              __pyx_t_7 = (__pyx_v_lim_is_none != 0);
              if (!__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L126_bool_binop_done;
              }
              __pyx_t_7 = ((!(__pyx_v_lim_is_none != 0)) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L126_bool_binop_done;
              }
/* … */
              if (__pyx_t_4) {
/* … */
              }
+3363:                                                ((lim_min < lim_max and
              __pyx_t_7 = ((__pyx_v_lim_min < __pyx_v_lim_max) != 0);
              if (!__pyx_t_7) {
                goto __pyx_L129_next_or;
              } else {
              }
+3364:                                                  lim_min <= phi and
              __pyx_t_7 = ((__pyx_v_lim_min <= __pyx_v_phi) != 0);
              if (!__pyx_t_7) {
                goto __pyx_L129_next_or;
              } else {
              }
+3365:                                                  phi <= lim_max) or
              __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
              if (!__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L126_bool_binop_done;
              }
              __pyx_L129_next_or:;
+3366:                                                 (lim_min>lim_max and
              __pyx_t_7 = ((__pyx_v_lim_min > __pyx_v_lim_max) != 0);
              if (__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L126_bool_binop_done;
              }
+3367:                                                  (phi>=lim_min or
              __pyx_t_7 = ((__pyx_v_phi >= __pyx_v_lim_min) != 0);
              if (!__pyx_t_7) {
              } else {
                __pyx_t_4 = __pyx_t_7;
                goto __pyx_L126_bool_binop_done;
              }
+3368:                                                   phi<=lim_max)))):
              __pyx_t_7 = ((__pyx_v_phi <= __pyx_v_lim_max) != 0);
              __pyx_t_4 = __pyx_t_7;
              __pyx_L126_bool_binop_done:;
 3369:                                 # Get the scal prod to determine if in or out
 3370:                                 sca = Ccos(phi) * normx[jj] * ray_vdir[0] + \
+3371:                                       Csin(phi) * normx[jj] * ray_vdir[1] + \
                __pyx_v_sca = ((((cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[0])) + ((sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_jj])) * (__pyx_v_ray_vdir[1]))) + ((__pyx_v_normy[__pyx_v_jj]) * (__pyx_v_ray_vdir[2])));
 3372:                                       normy[jj] * ray_vdir[2]
+3373:                                 if sca<=0 and k<kout:
                __pyx_t_7 = ((__pyx_v_sca <= 0.0) != 0);
                if (__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_t_7 = ((__pyx_v_k < __pyx_v_kout) != 0);
                __pyx_t_4 = __pyx_t_7;
                __pyx_L135_bool_binop_done:;
                if (__pyx_t_4) {
/* … */
                  goto __pyx_L134;
                }
+3374:                                     kout = k
                  __pyx_v_kout = __pyx_v_k;
+3375:                                     done = 1
                  __pyx_v_done = 1;
+3376:                                     indout = jj
                  __pyx_v_indout = __pyx_v_jj;
+3377:                                 elif sca>=0 and k<min(kin,kout):
                __pyx_t_7 = ((__pyx_v_sca >= 0.0) != 0);
                if (__pyx_t_7) {
                } else {
                  __pyx_t_4 = __pyx_t_7;
                  goto __pyx_L137_bool_binop_done;
                }
                __pyx_t_9 = __pyx_v_kout;
                __pyx_t_2 = __pyx_v_kin;
                if (((__pyx_t_9 < __pyx_t_2) != 0)) {
                  __pyx_t_1 = __pyx_t_9;
                } else {
                  __pyx_t_1 = __pyx_t_2;
                }
                __pyx_t_7 = ((__pyx_v_k < __pyx_t_1) != 0);
                __pyx_t_4 = __pyx_t_7;
                __pyx_L137_bool_binop_done:;
                if (__pyx_t_4) {
/* … */
                }
                __pyx_L134:;
+3378:                                     kin = k
                  __pyx_v_kin = __pyx_v_k;
+3379:                                     indin = jj
                  __pyx_v_indin = __pyx_v_jj;
 3380: 
+3381:     if not lim_is_none:
  __pyx_t_4 = ((!(__pyx_v_lim_is_none != 0)) != 0);
  if (__pyx_t_4) {
/* … */
  }
+3382:         ephi_in0 = -sinl0
    __pyx_v_ephi_in0 = (-__pyx_v_sinl0);
+3383:         ephi_in1 =  cosl0
    __pyx_v_ephi_in1 = __pyx_v_cosl0;
+3384:         if Cabs(ray_vdir[0] * ephi_in0 + ray_vdir[1] * ephi_in1) > eps_pln:
    __pyx_t_4 = ((fabs((((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1))) > __pyx_v_eps_pln) != 0);
    if (__pyx_t_4) {
/* … */
    }
 3385:             k = -(ray_orig[0] * ephi_in0 + ray_orig[1] * ephi_in1) \
+3386:                 /(ray_vdir[0] * ephi_in0 + ray_vdir[1] * ephi_in1)
      __pyx_v_k = ((-(((__pyx_v_ray_orig[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_orig[1]) * __pyx_v_ephi_in1))) / (((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1)));
+3387:             if k >= 0:
      __pyx_t_4 = ((__pyx_v_k >= 0.0) != 0);
      if (__pyx_t_4) {
/* … */
      }
 3388:                 # Check if in ves_poly
+3389:                 sol0 = (ray_orig[0] + k * ray_vdir[0]) * cosl0 + \
        __pyx_v_sol0 = ((((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0]))) * __pyx_v_cosl0) + (((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1]))) * __pyx_v_sinl0));
 3390:                        (ray_orig[1] + k * ray_vdir[1]) * sinl0
+3391:                 sol1 =  ray_orig[2] + k * ray_vdir[2]
        __pyx_v_sol1 = ((__pyx_v_ray_orig[2]) + (__pyx_v_k * (__pyx_v_ray_vdir[2])));
+3392:                 inter_bbox = is_point_in_path(nvert, lpolyx, lpolyy, sol0, sol1)
        __pyx_v_inter_bbox = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_nvert, __pyx_v_lpolyx, __pyx_v_lpolyy, __pyx_v_sol0, __pyx_v_sol1);
+3393:                 if inter_bbox:
        __pyx_t_4 = (__pyx_v_inter_bbox != 0);
        if (__pyx_t_4) {
/* … */
        }
 3394:                     # Check PIn (POut not possible for limited torus)
+3395:                     sca = ray_vdir[0] * ephi_in0 + ray_vdir[1] * ephi_in1
          __pyx_v_sca = (((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1));
+3396:                     if sca<=0 and k<kout:
          __pyx_t_7 = ((__pyx_v_sca <= 0.0) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_4 = __pyx_t_7;
            goto __pyx_L144_bool_binop_done;
          }
          __pyx_t_7 = ((__pyx_v_k < __pyx_v_kout) != 0);
          __pyx_t_4 = __pyx_t_7;
          __pyx_L144_bool_binop_done:;
          if (__pyx_t_4) {
/* … */
            goto __pyx_L143;
          }
+3397:                         kout = k
            __pyx_v_kout = __pyx_v_k;
+3398:                         done = 1
            __pyx_v_done = 1;
+3399:                         indout = -1
            __pyx_v_indout = -1;
+3400:                     elif sca>=0 and k<min(kin,kout):
          __pyx_t_7 = ((__pyx_v_sca >= 0.0) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_4 = __pyx_t_7;
            goto __pyx_L146_bool_binop_done;
          }
          __pyx_t_1 = __pyx_v_kout;
          __pyx_t_9 = __pyx_v_kin;
          if (((__pyx_t_1 < __pyx_t_9) != 0)) {
            __pyx_t_2 = __pyx_t_1;
          } else {
            __pyx_t_2 = __pyx_t_9;
          }
          __pyx_t_7 = ((__pyx_v_k < __pyx_t_2) != 0);
          __pyx_t_4 = __pyx_t_7;
          __pyx_L146_bool_binop_done:;
          if (__pyx_t_4) {
/* … */
          }
          __pyx_L143:;
+3401:                         kin = k
            __pyx_v_kin = __pyx_v_k;
+3402:                         indin = -1
            __pyx_v_indin = -1;
 3403: 
+3404:         ephi_in0 =  sinl1
    __pyx_v_ephi_in0 = __pyx_v_sinl1;
+3405:         ephi_in1 = -cosl1
    __pyx_v_ephi_in1 = (-__pyx_v_cosl1);
+3406:         if Cabs(ray_vdir[0] * ephi_in0 + ray_vdir[1] * ephi_in1) > eps_pln:
    __pyx_t_4 = ((fabs((((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1))) > __pyx_v_eps_pln) != 0);
    if (__pyx_t_4) {
/* … */
    }
 3407:             k = -(ray_orig[0] * ephi_in0 + ray_orig[1] * ephi_in1)\
+3408:                 /(ray_vdir[0] * ephi_in0 + ray_vdir[1] * ephi_in1)
      __pyx_v_k = ((-(((__pyx_v_ray_orig[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_orig[1]) * __pyx_v_ephi_in1))) / (((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1)));
+3409:             if k >= 0:
      __pyx_t_4 = ((__pyx_v_k >= 0.0) != 0);
      if (__pyx_t_4) {
/* … */
      }
+3410:                 sol0 = (ray_orig[0] + k * ray_vdir[0]) * cosl1 +\
        __pyx_v_sol0 = ((((__pyx_v_ray_orig[0]) + (__pyx_v_k * (__pyx_v_ray_vdir[0]))) * __pyx_v_cosl1) + (((__pyx_v_ray_orig[1]) + (__pyx_v_k * (__pyx_v_ray_vdir[1]))) * __pyx_v_sinl1));
 3411:                        (ray_orig[1] + k * ray_vdir[1]) * sinl1
+3412:                 sol1 =  ray_orig[2] + k * ray_vdir[2]
        __pyx_v_sol1 = ((__pyx_v_ray_orig[2]) + (__pyx_v_k * (__pyx_v_ray_vdir[2])));
 3413:                 # Check if in ves_poly
+3414:                 inter_bbox = is_point_in_path(nvert, lpolyx, lpolyy, sol0, sol1)
        __pyx_v_inter_bbox = __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(__pyx_v_nvert, __pyx_v_lpolyx, __pyx_v_lpolyy, __pyx_v_sol0, __pyx_v_sol1);
+3415:                 if inter_bbox:
        __pyx_t_4 = (__pyx_v_inter_bbox != 0);
        if (__pyx_t_4) {
/* … */
        }
 3416:                     # Check PIn (POut not possible for limited torus)
+3417:                     sca = ray_vdir[0]*ephi_in0 + ray_vdir[1]*ephi_in1
          __pyx_v_sca = (((__pyx_v_ray_vdir[0]) * __pyx_v_ephi_in0) + ((__pyx_v_ray_vdir[1]) * __pyx_v_ephi_in1));
+3418:                     if sca<=0 and k<kout:
          __pyx_t_7 = ((__pyx_v_sca <= 0.0) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_4 = __pyx_t_7;
            goto __pyx_L152_bool_binop_done;
          }
          __pyx_t_7 = ((__pyx_v_k < __pyx_v_kout) != 0);
          __pyx_t_4 = __pyx_t_7;
          __pyx_L152_bool_binop_done:;
          if (__pyx_t_4) {
/* … */
            goto __pyx_L151;
          }
+3419:                         kout = k
            __pyx_v_kout = __pyx_v_k;
+3420:                         done = 1
            __pyx_v_done = 1;
+3421:                         indout = -2
            __pyx_v_indout = -2;
+3422:                     elif sca>=0 and k<min(kin,kout):
          __pyx_t_7 = ((__pyx_v_sca >= 0.0) != 0);
          if (__pyx_t_7) {
          } else {
            __pyx_t_4 = __pyx_t_7;
            goto __pyx_L154_bool_binop_done;
          }
          __pyx_t_2 = __pyx_v_kout;
          __pyx_t_1 = __pyx_v_kin;
          if (((__pyx_t_2 < __pyx_t_1) != 0)) {
            __pyx_t_9 = __pyx_t_2;
          } else {
            __pyx_t_9 = __pyx_t_1;
          }
          __pyx_t_7 = ((__pyx_v_k < __pyx_t_9) != 0);
          __pyx_t_4 = __pyx_t_7;
          __pyx_L154_bool_binop_done:;
          if (__pyx_t_4) {
/* … */
          }
          __pyx_L151:;
+3423:                         kin = k
            __pyx_v_kin = __pyx_v_k;
+3424:                         indin = -2
            __pyx_v_indin = -2;
 3425:     # == Analyzing if there was impact =========================================
+3426:     if done==1:
  __pyx_t_4 = ((__pyx_v_done == 1) != 0);
  if (__pyx_t_4) {
/* … */
  }
+3427:         if is_in_struct :
    __pyx_t_4 = (__pyx_v_is_in_struct != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L157;
    }
+3428:             kpout_loc[0] = kout
      (__pyx_v_kpout_loc[0]) = __pyx_v_kout;
+3429:             if indout==-1:
      switch (__pyx_v_indout) {
        case -1L:
/* … */
        break;
        case -2L:
+3430:                 vperpin[0] = -sinl0
        (__pyx_v_vperpin[0]) = (-__pyx_v_sinl0);
+3431:                 vperpin[1] = cosl0
        (__pyx_v_vperpin[1]) = __pyx_v_cosl0;
+3432:                 vperpin[2] = 0.
        (__pyx_v_vperpin[2]) = 0.;
+3433:             elif indout==-2:
        break;
        default:
+3434:                 vperpin[0] = sinl1
        (__pyx_v_vperpin[0]) = __pyx_v_sinl1;
+3435:                 vperpin[1] = -cosl1
        (__pyx_v_vperpin[1]) = (-__pyx_v_cosl1);
+3436:                 vperpin[2] = 0.
        (__pyx_v_vperpin[2]) = 0.;
 3437:             else:
+3438:                 sout0 = ray_orig[0] + kout * ray_vdir[0]
        __pyx_v_sout0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_kout * (__pyx_v_ray_vdir[0])));
+3439:                 sout1 = ray_orig[1] + kout * ray_vdir[1]
        __pyx_v_sout1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_kout * (__pyx_v_ray_vdir[1])));
+3440:                 phi = Catan2(sout1, sout0)
        __pyx_v_phi = atan2(__pyx_v_sout1, __pyx_v_sout0);
+3441:                 vperpin[0] = Ccos(phi) * normx[indout]
        (__pyx_v_vperpin[0]) = (cos(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_indout]));
+3442:                 vperpin[1] = Csin(phi) * normx[indout]
        (__pyx_v_vperpin[1]) = (sin(__pyx_v_phi) * (__pyx_v_normx[__pyx_v_indout]));
+3443:                 vperpin[2] = normy[indout]
        (__pyx_v_vperpin[2]) = (__pyx_v_normy[__pyx_v_indout]);
        break;
      }
+3444:             ind_loc[0] = indout
      (__pyx_v_ind_loc[0]) = __pyx_v_indout;
+3445:             if kin<kout:
      __pyx_t_4 = ((__pyx_v_kin < __pyx_v_kout) != 0);
      if (__pyx_t_4) {
/* … */
      }
+3446:                 kpin_loc[0] = kin
        (__pyx_v_kpin_loc[0]) = __pyx_v_kin;
+3447:         elif kin < kout and kin < res_kin:
    __pyx_t_7 = ((__pyx_v_kin < __pyx_v_kout) != 0);
    if (__pyx_t_7) {
    } else {
      __pyx_t_4 = __pyx_t_7;
      goto __pyx_L159_bool_binop_done;
    }
    __pyx_t_7 = ((__pyx_v_kin < __pyx_v_res_kin) != 0);
    __pyx_t_4 = __pyx_t_7;
    __pyx_L159_bool_binop_done:;
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L157:;
+3448:             kpin_loc[0] = kin
      (__pyx_v_kpin_loc[0]) = __pyx_v_kin;
+3449:             if indin==-1:
      switch (__pyx_v_indin) {
        case -1L:
/* … */
        break;
        case -2L:
+3450:                 vperpin[0] = sinl0
        (__pyx_v_vperpin[0]) = __pyx_v_sinl0;
+3451:                 vperpin[1] = -cosl0
        (__pyx_v_vperpin[1]) = (-__pyx_v_cosl0);
+3452:                 vperpin[2] = 0.
        (__pyx_v_vperpin[2]) = 0.;
+3453:             elif indin==-2:
        break;
        default:
+3454:                 vperpin[0] = -sinl1
        (__pyx_v_vperpin[0]) = (-__pyx_v_sinl1);
+3455:                 vperpin[1] = cosl1
        (__pyx_v_vperpin[1]) = __pyx_v_cosl1;
+3456:                 vperpin[2] = 0.
        (__pyx_v_vperpin[2]) = 0.;
 3457:             else:
+3458:                 sin0 = ray_orig[0] + kin * ray_vdir[0]
        __pyx_v_sin0 = ((__pyx_v_ray_orig[0]) + (__pyx_v_kin * (__pyx_v_ray_vdir[0])));
+3459:                 sin1 = ray_orig[1] + kin * ray_vdir[1]
        __pyx_v_sin1 = ((__pyx_v_ray_orig[1]) + (__pyx_v_kin * (__pyx_v_ray_vdir[1])));
+3460:                 phi = Catan2(sin1,sin0)
        __pyx_v_phi = atan2(__pyx_v_sin1, __pyx_v_sin0);
+3461:                 vperpin[0] = -Ccos(phi) * normx[indin]
        (__pyx_v_vperpin[0]) = ((-cos(__pyx_v_phi)) * (__pyx_v_normx[__pyx_v_indin]));
+3462:                 vperpin[1] = -Csin(phi) * normx[indin]
        (__pyx_v_vperpin[1]) = ((-sin(__pyx_v_phi)) * (__pyx_v_normx[__pyx_v_indin]));
+3463:                 vperpin[2] = -normy[indin]
        (__pyx_v_vperpin[2]) = (-(__pyx_v_normy[__pyx_v_indin]));
        break;
      }
+3464:             ind_loc[0] = indin
      (__pyx_v_ind_loc[0]) = __pyx_v_indin;
+3465:     return (res_kin != kpin_loc[0]) or (res_kout != kpout_loc[0]
  __pyx_t_7 = ((__pyx_v_res_kin != (__pyx_v_kpin_loc[0])) != 0);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_4 = __pyx_t_7;
    goto __pyx_L161_bool_binop_done;
  }
/* … */
  __pyx_t_7 = ((__pyx_v_res_kout != (__pyx_v_kpout_loc[0])) != 0);
  if (__pyx_t_7) {
  } else {
    __pyx_t_4 = __pyx_t_7;
    goto __pyx_L161_bool_binop_done;
  }
+3466:                                         and is_in_struct)
  __pyx_t_7 = (__pyx_v_is_in_struct != 0);
  __pyx_t_4 = __pyx_t_7;
  __pyx_L161_bool_binop_done:;
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;
 3467: 
 3468: 
 3469: 
+3470: cdef inline void compute_inv_and_sign(const double[3] ray_vdir,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_compute_inv_and_sign(double *__pyx_v_ray_vdir, int *__pyx_v_sign, double *__pyx_v_inv_direction) {
  CYTHON_UNUSED int __pyx_v_t0;
  long __pyx_v_ii;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 3471:                                       int[3] sign,
 3472:                                       double[3] inv_direction) nogil:
 3473:     """
 3474:     Computes the inverse direction and sign of each coordinate of a LOS.
 3475:     Params
 3476:     ======
 3477:     ray_vdir : (3) double array
 3478:        direction of the LOS
 3479:     sign : (3) int array <INOUT>
 3480:        for each coordinate of the direction, indicates if negative or not
 3481:        If sign[i] = 1, ray_vdir[i] < 0, else sign[i] = 0
 3482:     inv_direction : (3) double array
 3483:        Inverse on each axis of direction of LOS
 3484:     """
+3485:     cdef int t0 = 1000000
  __pyx_v_t0 = 0xF4240;
 3486:     # computing sign and direction
+3487:     for  ii in range(3):
  for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
    __pyx_v_ii = __pyx_t_1;
+3488:         if ray_vdir[ii] * ray_vdir[ii] < _VSMALL:
    __pyx_t_2 = ((((__pyx_v_ray_vdir[__pyx_v_ii]) * (__pyx_v_ray_vdir[__pyx_v_ii])) < __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L5;
    }
+3489:             inv_direction[ii] = 1. / _VSMALL
      (__pyx_v_inv_direction[__pyx_v_ii]) = (1. / __pyx_v_4tofu_4geom_5_GG03__VSMALL);
 3490:         else:
+3491:             inv_direction[ii] = 1. / ray_vdir[ii]
    /*else*/ {
      (__pyx_v_inv_direction[__pyx_v_ii]) = (1. / (__pyx_v_ray_vdir[__pyx_v_ii]));
    }
    __pyx_L5:;
+3492:         if ray_vdir[ii] < 0.:
    __pyx_t_2 = (((__pyx_v_ray_vdir[__pyx_v_ii]) < 0.) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L6;
    }
+3493:             sign[ii] = 1
      (__pyx_v_sign[__pyx_v_ii]) = 1;
 3494:         else:
+3495:             sign[ii] = 0
    /*else*/ {
      (__pyx_v_sign[__pyx_v_ii]) = 0;
    }
    __pyx_L6:;
  }
+3496:     return
  goto __pyx_L0;
 3497: 
+3498: cdef inline bint inter_ray_aabb_box(const int[3] sign,
static CYTHON_INLINE int __pyx_f_4tofu_4geom_5_GG03_inter_ray_aabb_box(int *__pyx_v_sign, double *__pyx_v_inv_direction, double *__pyx_v_bounds, double *__pyx_v_ds, struct __pyx_opt_args_4tofu_4geom_5_GG03_inter_ray_aabb_box *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_inter_ray_aabb_box {
  int __pyx_n;
  int countin;
  int debug_plot;
};
 3499:                                     const double[3] inv_direction,
 3500:                                     const double[6] bounds,
 3501:                                     const double[3] ds,
+3502:                                     bint countin=False,
  int __pyx_v_countin = ((int)0);
  double __pyx_v_tmin;
  double __pyx_v_tmax;
  double __pyx_v_tymin;
  double __pyx_v_tymax;
  double __pyx_v_tzmin;
  double __pyx_v_tzmax;
  int __pyx_v_t0;
  int __pyx_v_res;
  int __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_countin = __pyx_optional_args->countin;
    }
  }
 3503:                                     bint debug_plot=False) nogil:
 3504:     """
 3505:     Computes intersection between a ray (LOS) and a axis aligned bounding
 3506:     box. It returns True if ray intersects box, else False.
 3507:     Params
 3508:     =====
 3509:        sign : (3) int array
 3510:           Sign of the direction of the ray.
 3511:           If sign[i] = 1, ray_vdir[i] < 0, else sign[i] = 0
 3512:        inv_direction : (3) double array
 3513:           Inverse on each axis of direction of LOS
 3514:        bounds : (6) double array
 3515:           [3d coords of lowerleftback point of bounding box,
 3516:            3d coords of upperrightfront point of bounding box]
 3517:        ds : (3) double array
 3518:           [3d coords of origin of ray]
 3519:     Returns
 3520:     =======
 3521:        True if ray intersects bounding box, else False
 3522:     """
 3523:     cdef double tmin, tmax, tymin, tymax
 3524:     cdef double tzmin, tzmax
+3525:     cdef int t0 = 1000000
  __pyx_v_t0 = 0xF4240;
 3526:     cdef bint res
 3527: 
 3528:     # computing intersection
+3529:     tmin = (bounds[sign[0]*3] - ds[0]) * inv_direction[0]
  __pyx_v_tmin = (((__pyx_v_bounds[((__pyx_v_sign[0]) * 3)]) - (__pyx_v_ds[0])) * (__pyx_v_inv_direction[0]));
+3530:     tmax = (bounds[(1-sign[0])*3] - ds[0]) * inv_direction[0]
  __pyx_v_tmax = (((__pyx_v_bounds[((1 - (__pyx_v_sign[0])) * 3)]) - (__pyx_v_ds[0])) * (__pyx_v_inv_direction[0]));
+3531:     tymin = (bounds[(sign[1])*3 + 1] - ds[1]) * inv_direction[1]
  __pyx_v_tymin = (((__pyx_v_bounds[(((__pyx_v_sign[1]) * 3) + 1)]) - (__pyx_v_ds[1])) * (__pyx_v_inv_direction[1]));
+3532:     tymax = (bounds[(1-sign[1])*3+1] - ds[1]) * inv_direction[1]
  __pyx_v_tymax = (((__pyx_v_bounds[(((1 - (__pyx_v_sign[1])) * 3) + 1)]) - (__pyx_v_ds[1])) * (__pyx_v_inv_direction[1]));
+3533:     if ( (tmin > tymax) or (tymin > tmax) ):
  __pyx_t_2 = ((__pyx_v_tmin > __pyx_v_tymax) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tymin > __pyx_v_tmax) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3534:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+3535:     if (tymin > tmin):
  __pyx_t_1 = ((__pyx_v_tymin > __pyx_v_tmin) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3536:         tmin = tymin
    __pyx_v_tmin = __pyx_v_tymin;
+3537:     if (tymax < tmax):
  __pyx_t_1 = ((__pyx_v_tymax < __pyx_v_tmax) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3538:         tmax = tymax
    __pyx_v_tmax = __pyx_v_tymax;
+3539:     if not inv_direction[2] == 1./_VSMALL:
  __pyx_t_1 = ((!(((__pyx_v_inv_direction[2]) == (1. / __pyx_v_4tofu_4geom_5_GG03__VSMALL)) != 0)) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L8;
  }
+3540:         tzmin = (bounds[(sign[2])*3+2] - ds[2]) * inv_direction[2]
    __pyx_v_tzmin = (((__pyx_v_bounds[(((__pyx_v_sign[2]) * 3) + 2)]) - (__pyx_v_ds[2])) * (__pyx_v_inv_direction[2]));
+3541:         tzmax = (bounds[(1-sign[2])*3+2] - ds[2]) * inv_direction[2]
    __pyx_v_tzmax = (((__pyx_v_bounds[(((1 - (__pyx_v_sign[2])) * 3) + 2)]) - (__pyx_v_ds[2])) * (__pyx_v_inv_direction[2]));
 3542:     else:
+3543:         tzmin = Cnan
  /*else*/ {
    __pyx_v_tzmin = NAN;
+3544:         tzmax = Cnan
    __pyx_v_tzmax = NAN;
  }
  __pyx_L8:;
+3545:     if ( (tmin > tzmax) or (tzmin > tmax) ):
  __pyx_t_2 = ((__pyx_v_tmin > __pyx_v_tzmax) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tzmin > __pyx_v_tmax) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L10_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3546:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+3547:     if (tzmin > tmin):
  __pyx_t_1 = ((__pyx_v_tzmin > __pyx_v_tmin) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3548:         tmin = tzmin
    __pyx_v_tmin = __pyx_v_tzmin;
+3549:     if (tzmax < tmax):
  __pyx_t_1 = ((__pyx_v_tzmax < __pyx_v_tmax) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3550:         tmax = tzmax
    __pyx_v_tmax = __pyx_v_tzmax;
+3551:     if countin and (tmin < 0.) and (tmax < 0.):
  __pyx_t_2 = (__pyx_v_countin != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tmin < 0.) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L15_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tmax < 0.) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L15_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3552:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
+3553:     elif not countin and tmin < 0:
  __pyx_t_2 = ((!(__pyx_v_countin != 0)) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tmin < 0.0) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3554:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 3555: 
+3556:     res = (tmin < t0) and (tmax > -t0)
  __pyx_t_2 = ((__pyx_v_tmin < __pyx_v_t0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_tmax > (-__pyx_v_t0)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L20_bool_binop_done:;
  __pyx_v_res = __pyx_t_1;
+3557:     return  res
  __pyx_r = __pyx_v_res;
  goto __pyx_L0;
 3558: 
 3559: 
+3560: cdef inline bint is_point_in_path(const int nvert,
static CYTHON_INLINE int __pyx_f_4tofu_4geom_5_GG03_is_point_in_path(int const __pyx_v_nvert, double const *__pyx_v_vertx, double const *__pyx_v_verty, double const __pyx_v_testx, double const __pyx_v_testy) {
  int __pyx_v_i;
  int __pyx_v_c;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 3561:                                   const double* vertx,
 3562:                                   const double* verty,
 3563:                                   const double testx,
 3564:                                   const double testy) nogil:
 3565:     """
 3566:     Computes if a point of coordiates (testx, testy) is in the polygon defined
 3567:     by nvert vertices of coordinates (vertx, verty)
 3568:     Params
 3569:     ======
 3570:         nvert : int
 3571:            number of vertices in polygon
 3572:         vertx : double array
 3573:            x-coordinates of polygon
 3574:         verty : double array
 3575:            y-coordinate of polygon
 3576:         testx : double
 3577:            x-coordinate of point to be tested if in or out of polygon
 3578:         testy : double
 3579:            y-coordinate of point to be tested if in or out of polygon
 3580:     Returns
 3581:     =======
 3582:         bool : True if point is in the polygon, else False
 3583:     """
 3584:     cdef int i
+3585:     cdef bint c = 0
  __pyx_v_c = 0;
+3586:     for i in range(nvert):
  __pyx_t_1 = __pyx_v_nvert;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_i = __pyx_t_3;
+3587:         if ( ((verty[i]>testy) != (verty[i+1]>testy)) and
    __pyx_t_5 = ((((__pyx_v_verty[__pyx_v_i]) > __pyx_v_testy) != ((__pyx_v_verty[(__pyx_v_i + 1)]) > __pyx_v_testy)) != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_4 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }
/* … */
    if (__pyx_t_4) {
/* … */
    }
  }
+3588:             (testx < (vertx[i+1]-vertx[i]) * (testy-verty[i]) \
    __pyx_t_5 = ((__pyx_v_testx < (((((__pyx_v_vertx[(__pyx_v_i + 1)]) - (__pyx_v_vertx[__pyx_v_i])) * (__pyx_v_testy - (__pyx_v_verty[__pyx_v_i]))) / ((__pyx_v_verty[(__pyx_v_i + 1)]) - (__pyx_v_verty[__pyx_v_i]))) + (__pyx_v_vertx[__pyx_v_i]))) != 0);
    __pyx_t_4 = __pyx_t_5;
    __pyx_L6_bool_binop_done:;
 3589:              / (verty[i+1]-verty[i]) + vertx[i]) ):
+3590:             c = not c
      __pyx_v_c = (!(__pyx_v_c != 0));
+3591:     return c
  __pyx_r = __pyx_v_c;
  goto __pyx_L0;
 3592: 
 3593: 
+3594: cdef inline void comp_bbox_poly_tor(int nvert,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(int __pyx_v_nvert, double *__pyx_v_vertr, double *__pyx_v_vertz, double *__pyx_v_bounds) {
  int __pyx_v_ii;
  double __pyx_v_rmax;
  double __pyx_v_zmin;
  double __pyx_v_zmax;
  double __pyx_v_tmp_val;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 3595:                                     double* vertr,
 3596:                                     double* vertz,
 3597:                                     double[6] bounds) nogil:
 3598:     """
 3599:     Computes bounding box of a toroidally continous structure defined by
 3600:     the vertices vert.
 3601:     Params
 3602:     =====
 3603:         nvert : inter
 3604:            Number of vertices in the poygon
 3605:         vert : double array
 3606:            Coordinates of the polygon defining the structure in the poloidal
 3607:            plane such that vert[0:3, ii] = (x_i, y_i) the coordinates of the
 3608:            i-th vertex
 3609:         bounds : (6) double array <INOUT>
 3610:            coordinates of the lowerleftback point and of the upperrightfront
 3611:            point of the bounding box of the structure toroidally continous on
 3612:            the tore.
 3613:     """
 3614:     cdef int ii
+3615:     cdef double rmax=vertr[0], zmin=vertz[0], zmax=vertz[0]
  __pyx_v_rmax = (__pyx_v_vertr[0]);
  __pyx_v_zmin = (__pyx_v_vertz[0]);
  __pyx_v_zmax = (__pyx_v_vertz[0]);
 3616:     cdef double tmp_val
+3617:     for ii in range(1, nvert):
  __pyx_t_1 = __pyx_v_nvert;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
+3618:         tmp_val = vertr[ii]
    __pyx_v_tmp_val = (__pyx_v_vertr[__pyx_v_ii]);
+3619:         if tmp_val > rmax:
    __pyx_t_4 = ((__pyx_v_tmp_val > __pyx_v_rmax) != 0);
    if (__pyx_t_4) {
/* … */
    }
+3620:             rmax = tmp_val
      __pyx_v_rmax = __pyx_v_tmp_val;
+3621:         tmp_val = vertz[ii]
    __pyx_v_tmp_val = (__pyx_v_vertz[__pyx_v_ii]);
+3622:         if tmp_val > zmax:
    __pyx_t_4 = ((__pyx_v_tmp_val > __pyx_v_zmax) != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L6;
    }
+3623:             zmax = tmp_val
      __pyx_v_zmax = __pyx_v_tmp_val;
+3624:         elif tmp_val < zmin:
    __pyx_t_4 = ((__pyx_v_tmp_val < __pyx_v_zmin) != 0);
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L6:;
  }
+3625:             zmin = tmp_val
      __pyx_v_zmin = __pyx_v_tmp_val;
+3626:     bounds[0] = -rmax
  (__pyx_v_bounds[0]) = (-__pyx_v_rmax);
+3627:     bounds[1] = -rmax
  (__pyx_v_bounds[1]) = (-__pyx_v_rmax);
+3628:     bounds[2] = zmin
  (__pyx_v_bounds[2]) = __pyx_v_zmin;
+3629:     bounds[3] = rmax
  (__pyx_v_bounds[3]) = __pyx_v_rmax;
+3630:     bounds[4] = rmax
  (__pyx_v_bounds[4]) = __pyx_v_rmax;
+3631:     bounds[5] = zmax
  (__pyx_v_bounds[5]) = __pyx_v_zmax;
+3632:     return
  goto __pyx_L0;
 3633: 
 3634: 
+3635: cdef inline void comp_bbox_poly_tor_lim(int nvert,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(int __pyx_v_nvert, double *__pyx_v_vertr, double *__pyx_v_vertz, double *__pyx_v_bounds, double __pyx_v_lmin, double __pyx_v_lmax) {
  int __pyx_v_ii;
  double __pyx_v_toto;
  double __pyx_v_xmin;
  double __pyx_v_xmax;
  double __pyx_v_ymin;
  double __pyx_v_ymax;
  double __pyx_v_zmin;
  double __pyx_v_zmax;
  double __pyx_v_cos_min;
  double __pyx_v_sin_min;
  double __pyx_v_cos_max;
  double __pyx_v_sin_max;
  double __pyx_v_half_pi;
  double __pyx_v_temp[3];
  double __pyx_v_bounds_min[6];
/* … */
  /* function exit code */
  __pyx_L0:;
}
 3636:                                         double* vertr,
 3637:                                         double* vertz,
 3638:                                         double[6] bounds,
 3639:                                         double lmin, double lmax) nogil:
 3640:     """
 3641:     Computes bounding box of a toroidally limited structure defined by
 3642:     the vertices vert, and limited to the angles (lmin, lmax)
 3643:     Params
 3644:     =====
 3645:     nvert : inter
 3646:        Number of vertices in the poygon
 3647:     vert : double array
 3648:        Coordinates of the polygon defining the structure in the poloidal plane
 3649:        such that vert[0:3, ii] = (x_i, y_i) the coordinates of the i-th vertex
 3650:     bounds : (6) double array <INOUT>
 3651:        coordinates of the lowerleftback point and of the upperrightfront point
 3652:        of the bounding box of the structure toroidally limited on the tore.
 3653:     lmin : double
 3654:        minimum toroidal angle where the structure lays.
 3655:     lmax : double
 3656:        maximum toroidal angle where the structure lays.
 3657:     """
 3658:     cdef int ii
+3659:     cdef double toto=100000.
  __pyx_v_toto = 100000.;
+3660:     cdef double xmin=toto, xmax=-toto
  __pyx_v_xmin = __pyx_v_toto;
  __pyx_v_xmax = (-__pyx_v_toto);
+3661:     cdef double ymin=toto, ymax=-toto
  __pyx_v_ymin = __pyx_v_toto;
  __pyx_v_ymax = (-__pyx_v_toto);
+3662:     cdef double zmin=toto, zmax=-toto
  __pyx_v_zmin = __pyx_v_toto;
  __pyx_v_zmax = (-__pyx_v_toto);
 3663:     cdef double cos_min
 3664:     cdef double sin_min
 3665:     cdef double cos_max
 3666:     cdef double sin_max
 3667:     cdef double cos_mid
 3668:     cdef double sin_mid
+3669:     cdef double half_pi = 0.5 * Cpi
  __pyx_v_half_pi = (0.5 * M_PI);
 3670:     cdef double[3] temp
 3671:     cdef double[6] bounds_min
+3672:     cos_min = Ccos(lmin)
  __pyx_v_cos_min = cos(__pyx_v_lmin);
+3673:     sin_min = Csin(lmin)
  __pyx_v_sin_min = sin(__pyx_v_lmin);
+3674:     cos_max = Ccos(lmax)
  __pyx_v_cos_max = cos(__pyx_v_lmax);
+3675:     sin_max = Csin(lmax)
  __pyx_v_sin_max = sin(__pyx_v_lmax);
+3676:     if (lmin >= 0.) and (lmax >= 0.):
  __pyx_t_2 = ((__pyx_v_lmin >= 0.) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_lmax >= 0.) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3677:         if lmax > half_pi and lmin < half_pi:
    __pyx_t_2 = ((__pyx_v_lmax > __pyx_v_half_pi) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_lmin < __pyx_v_half_pi) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L6;
    }
+3678:             comp_bbox_poly_tor(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])));
 3679:                                vertr,
 3680:                                vertz,
 3681:                                &bounds_min[0])
+3682:             if ymax < bounds_min[4]:
      __pyx_t_1 = ((__pyx_v_ymax < (__pyx_v_bounds_min[4])) != 0);
      if (__pyx_t_1) {
/* … */
      }
+3683:                 ymax = bounds_min[4]
        __pyx_v_ymax = (__pyx_v_bounds_min[4]);
+3684:         elif lmax < half_pi and lmin > half_pi:
    __pyx_t_2 = ((__pyx_v_lmax < __pyx_v_half_pi) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_lmin > __pyx_v_half_pi) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L6:;
+3685:             comp_bbox_poly_tor(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])));
 3686:                                vertr,
 3687:                                vertz,
 3688:                                &bounds_min[0])
+3689:             if ymin > bounds_min[1]:
      __pyx_t_1 = ((__pyx_v_ymin > (__pyx_v_bounds_min[1])) != 0);
      if (__pyx_t_1) {
/* … */
      }
+3690:                 ymin = bounds_min[1]
        __pyx_v_ymin = (__pyx_v_bounds_min[1]);
+3691:     elif (lmin <= 0 and lmax <= 0):
  __pyx_t_2 = ((__pyx_v_lmin <= 0.0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_lmax <= 0.0) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3692:         if lmax < -half_pi and lmin > -half_pi:
    __pyx_t_2 = ((__pyx_v_lmax < (-__pyx_v_half_pi)) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L16_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_lmin > (-__pyx_v_half_pi)) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L16_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L15;
    }
+3693:             comp_bbox_poly_tor(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])));
 3694:                                vertr,
 3695:                                vertz,
 3696:                                &bounds_min[0])
+3697:             if ymin > bounds_min[1]:
      __pyx_t_1 = ((__pyx_v_ymin > (__pyx_v_bounds_min[1])) != 0);
      if (__pyx_t_1) {
/* … */
      }
+3698:                 ymin = bounds_min[1]
        __pyx_v_ymin = (__pyx_v_bounds_min[1]);
 3699:             # cos_mid = Ccos(-half_pi)
 3700:             # sin_mid = Csin(-half_pi)
+3701:         elif lmax > -half_pi and lmin < -half_pi:
    __pyx_t_2 = ((__pyx_v_lmax > (-__pyx_v_half_pi)) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L19_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_lmin < (-__pyx_v_half_pi)) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L19_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L15:;
+3702:             comp_bbox_poly_tor(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])));
 3703:                                vertr,
 3704:                                vertz,
 3705:                                &bounds_min[0])
+3706:             if ymax < bounds_min[4]:
      __pyx_t_1 = ((__pyx_v_ymax < (__pyx_v_bounds_min[4])) != 0);
      if (__pyx_t_1) {
/* … */
      }
+3707:                 ymax = bounds_min[4]
        __pyx_v_ymax = (__pyx_v_bounds_min[4]);
 3708:             # cos_mid = Ccos(half_pi)
 3709:             # sin_mid = Csin(half_pi)
+3710:     elif (Cabs(Cabs(lmin) - Cpi) > _VSMALL and Cabs(Cabs(lmax) - Cpi) > _VSMALL):
  __pyx_t_2 = ((fabs((fabs(__pyx_v_lmin) - M_PI)) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L22_bool_binop_done;
  }
  __pyx_t_2 = ((fabs((fabs(__pyx_v_lmax) - M_PI)) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L22_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L3:;
+3711:         if lmin >= 0 :
    __pyx_t_1 = ((__pyx_v_lmin >= 0.0) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L24;
    }
 3712:             # lmin and lmax of opposite signs, so lmax < 0.
 3713:             # We divide and conquer:
+3714:             comp_bbox_poly_tor_lim(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds[0])), __pyx_v_lmin, M_PI);
 3715:                                    vertr,
 3716:                                    vertz,
 3717:                                    &bounds[0],
 3718:                                    lmin, Cpi)
+3719:             comp_bbox_poly_tor_lim(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])), (-M_PI), __pyx_v_lmax);
 3720:                                    vertr,
 3721:                                    vertz,
 3722:                                    &bounds_min[0],
 3723:                                    -Cpi, lmax)
 3724:         else:
 3725:             # lmin and lmax of opposite signs, so lmax <= 0.
 3726:             # We divide and conquer:
+3727:             comp_bbox_poly_tor_lim(nvert,
    /*else*/ {
/* … */
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds[0])), __pyx_v_lmin, -0.0);
 3728:                                    vertr,
 3729:                                    vertz,
 3730:                                    &bounds[0],
 3731:                                    lmin, -0.0)
+3732:             comp_bbox_poly_tor_lim(nvert,
      __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly_tor_lim(__pyx_v_nvert, __pyx_v_vertr, __pyx_v_vertz, (&(__pyx_v_bounds_min[0])), 0.0, __pyx_v_lmax);
    }
    __pyx_L24:;
 3733:                                    vertr,
 3734:                                    vertz,
 3735:                                    &bounds_min[0],
 3736:                                    0.0, lmax)
 3737:         # we compute the extremes of the two boxes:
+3738:         for ii in range(3):
    for (__pyx_t_3 = 0; __pyx_t_3 < 3; __pyx_t_3+=1) {
      __pyx_v_ii = __pyx_t_3;
+3739:             if bounds[ii] > bounds_min[ii]:
      __pyx_t_1 = (((__pyx_v_bounds[__pyx_v_ii]) > (__pyx_v_bounds_min[__pyx_v_ii])) != 0);
      if (__pyx_t_1) {
/* … */
      }
    }
+3740:                 bounds[ii] = bounds_min[ii]
        (__pyx_v_bounds[__pyx_v_ii]) = (__pyx_v_bounds_min[__pyx_v_ii]);
+3741:         for ii in range(3, 6):
    for (__pyx_t_3 = 3; __pyx_t_3 < 6; __pyx_t_3+=1) {
      __pyx_v_ii = __pyx_t_3;
+3742:             if bounds[ii] < bounds_min[ii]:
      __pyx_t_1 = (((__pyx_v_bounds[__pyx_v_ii]) < (__pyx_v_bounds_min[__pyx_v_ii])) != 0);
      if (__pyx_t_1) {
/* … */
      }
    }
+3743:                 bounds[ii] = bounds_min[ii]
        (__pyx_v_bounds[__pyx_v_ii]) = (__pyx_v_bounds_min[__pyx_v_ii]);
+3744:         return
    goto __pyx_L0;
 3745: 
+3746:     for ii in range(nvert):
  __pyx_t_3 = __pyx_v_nvert;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_ii = __pyx_t_5;
+3747:         temp[0] = vertr[ii]
    (__pyx_v_temp[0]) = (__pyx_v_vertr[__pyx_v_ii]);
+3748:         temp[1] = vertz[ii]
    (__pyx_v_temp[1]) = (__pyx_v_vertz[__pyx_v_ii]);
+3749:         coordshift_simple1d(temp, in_is_cartesian=False, CrossRef=1.,
    __pyx_t_6.__pyx_n = 4;
    __pyx_t_6.in_is_cartesian = 0;
    __pyx_t_6.CrossRef = 1.;
    __pyx_t_6.cos_phi = __pyx_v_cos_min;
    __pyx_t_6.sin_phi = __pyx_v_sin_min;
    __pyx_f_4tofu_4geom_5_GG03_coordshift_simple1d(__pyx_v_temp, &__pyx_t_6); 
 3750:                           cos_phi=cos_min, sin_phi=sin_min)
 3751:         # initialization:
+3752:         if xmin > temp[0]:
    __pyx_t_1 = ((__pyx_v_xmin > (__pyx_v_temp[0])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3753:             xmin = temp[0]
      __pyx_v_xmin = (__pyx_v_temp[0]);
+3754:         if xmax < temp[0]:
    __pyx_t_1 = ((__pyx_v_xmax < (__pyx_v_temp[0])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3755:             xmax = temp[0]
      __pyx_v_xmax = (__pyx_v_temp[0]);
+3756:         if ymin > temp[1]:
    __pyx_t_1 = ((__pyx_v_ymin > (__pyx_v_temp[1])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3757:             ymin = temp[1]
      __pyx_v_ymin = (__pyx_v_temp[1]);
+3758:         if ymax < temp[1]:
    __pyx_t_1 = ((__pyx_v_ymax < (__pyx_v_temp[1])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3759:             ymax = temp[1]
      __pyx_v_ymax = (__pyx_v_temp[1]);
+3760:         if zmin > temp[2]:
    __pyx_t_1 = ((__pyx_v_zmin > (__pyx_v_temp[2])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3761:             zmin = temp[2]
      __pyx_v_zmin = (__pyx_v_temp[2]);
+3762:         if zmax < temp[2]:
    __pyx_t_1 = ((__pyx_v_zmax < (__pyx_v_temp[2])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3763:             zmax = temp[2]
      __pyx_v_zmax = (__pyx_v_temp[2]);
 3764:         # .....
+3765:         temp[0] = vertr[ii]
    (__pyx_v_temp[0]) = (__pyx_v_vertr[__pyx_v_ii]);
+3766:         temp[1] = vertz[ii]
    (__pyx_v_temp[1]) = (__pyx_v_vertz[__pyx_v_ii]);
+3767:         coordshift_simple1d(temp, in_is_cartesian=False, CrossRef=1.,
    __pyx_t_6.__pyx_n = 4;
    __pyx_t_6.in_is_cartesian = 0;
    __pyx_t_6.CrossRef = 1.;
    __pyx_t_6.cos_phi = __pyx_v_cos_max;
    __pyx_t_6.sin_phi = __pyx_v_sin_max;
    __pyx_f_4tofu_4geom_5_GG03_coordshift_simple1d(__pyx_v_temp, &__pyx_t_6); 
 3768:                             cos_phi=cos_max, sin_phi=sin_max)
+3769:         if xmin > temp[0]:
    __pyx_t_1 = ((__pyx_v_xmin > (__pyx_v_temp[0])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3770:             xmin = temp[0]
      __pyx_v_xmin = (__pyx_v_temp[0]);
+3771:         if xmax < temp[0]:
    __pyx_t_1 = ((__pyx_v_xmax < (__pyx_v_temp[0])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3772:             xmax = temp[0]
      __pyx_v_xmax = (__pyx_v_temp[0]);
+3773:         if ymin > temp[1]:
    __pyx_t_1 = ((__pyx_v_ymin > (__pyx_v_temp[1])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3774:             ymin = temp[1]
      __pyx_v_ymin = (__pyx_v_temp[1]);
+3775:         if ymax < temp[1]:
    __pyx_t_1 = ((__pyx_v_ymax < (__pyx_v_temp[1])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3776:             ymax = temp[1]
      __pyx_v_ymax = (__pyx_v_temp[1]);
+3777:         if zmin > temp[2]:
    __pyx_t_1 = ((__pyx_v_zmin > (__pyx_v_temp[2])) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3778:             zmin = temp[2]
      __pyx_v_zmin = (__pyx_v_temp[2]);
+3779:         if zmax < temp[2]:
    __pyx_t_1 = ((__pyx_v_zmax < (__pyx_v_temp[2])) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
+3780:             zmax = temp[2]
      __pyx_v_zmax = (__pyx_v_temp[2]);
+3781:     bounds[0] = xmin
  (__pyx_v_bounds[0]) = __pyx_v_xmin;
+3782:     bounds[1] = ymin
  (__pyx_v_bounds[1]) = __pyx_v_ymin;
+3783:     bounds[2] = zmin
  (__pyx_v_bounds[2]) = __pyx_v_zmin;
+3784:     bounds[3] = xmax
  (__pyx_v_bounds[3]) = __pyx_v_xmax;
+3785:     bounds[4] = ymax
  (__pyx_v_bounds[4]) = __pyx_v_ymax;
+3786:     bounds[5] = zmax
  (__pyx_v_bounds[5]) = __pyx_v_zmax;
+3787:     return
  goto __pyx_L0;
 3788: 
 3789: 
+3790: cdef inline void comp_bbox_poly3d(int nvert,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_comp_bbox_poly3d(int __pyx_v_nvert, double *__pyx_v_vertx, double *__pyx_v_verty, double *__pyx_v_vertz, double *__pyx_v_bounds) {
  CYTHON_UNUSED int __pyx_v_ii;
  double __pyx_v_xmax;
  double __pyx_v_xmin;
  double __pyx_v_ymax;
  double __pyx_v_ymin;
  double __pyx_v_zmax;
  double __pyx_v_zmin;
  double __pyx_v_tmp_val;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 3791:                                   double* vertx,
 3792:                                   double* verty,
 3793:                                   double* vertz,
 3794:                                   double[6] bounds) nogil:
 3795:     """
 3796:     Computes bounding box of a 3d polygon
 3797:     Params
 3798:     =====
 3799:     nvert : inter
 3800:        Number of vertices in the poygon
 3801:     vert : double array
 3802:        Coordinates of the polygon defining the structure in the poloidal plane
 3803:        such that vert[0:3, ii] = (x_i, y_i, z_i) the coordinates of the i-th
 3804:        vertex
 3805:     bounds : (6) double array <INOUT>
 3806:        coordinates of the lowerleftback point and of the upperrightfront point
 3807:        of the bounding box of the polygon
 3808:     """
 3809:     cdef int ii
+3810:     cdef double xmax=vertx[0], xmin=vertx[0]
  __pyx_v_xmax = (__pyx_v_vertx[0]);
  __pyx_v_xmin = (__pyx_v_vertx[0]);
+3811:     cdef double ymax=verty[0], ymin=verty[0]
  __pyx_v_ymax = (__pyx_v_verty[0]);
  __pyx_v_ymin = (__pyx_v_verty[0]);
+3812:     cdef double zmax=vertz[0], zmin=vertz[0]
  __pyx_v_zmax = (__pyx_v_vertz[0]);
  __pyx_v_zmin = (__pyx_v_vertz[0]);
 3813:     cdef double tmp_val
+3814:     for ii in range(1, nvert):
  __pyx_t_1 = __pyx_v_nvert;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = 1; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_ii = __pyx_t_3;
 3815:         # x....
+3816:         tmp_val = vertx[0]
    __pyx_v_tmp_val = (__pyx_v_vertx[0]);
+3817:         if tmp_val > xmax:
    __pyx_t_4 = ((__pyx_v_tmp_val > __pyx_v_xmax) != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L5;
    }
+3818:             xmax = tmp_val
      __pyx_v_xmax = __pyx_v_tmp_val;
+3819:         elif tmp_val < xmin :
    __pyx_t_4 = ((__pyx_v_tmp_val < __pyx_v_xmin) != 0);
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L5:;
+3820:             xmin = tmp_val
      __pyx_v_xmin = __pyx_v_tmp_val;
 3821:         # y....
+3822:         tmp_val = verty[0]
    __pyx_v_tmp_val = (__pyx_v_verty[0]);
+3823:         if tmp_val > ymax:
    __pyx_t_4 = ((__pyx_v_tmp_val > __pyx_v_ymax) != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L6;
    }
+3824:             ymax = tmp_val
      __pyx_v_ymax = __pyx_v_tmp_val;
+3825:         elif tmp_val < ymin :
    __pyx_t_4 = ((__pyx_v_tmp_val < __pyx_v_ymin) != 0);
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L6:;
+3826:             ymin = tmp_val
      __pyx_v_ymin = __pyx_v_tmp_val;
 3827:         # z....
+3828:         tmp_val = vertz[0]
    __pyx_v_tmp_val = (__pyx_v_vertz[0]);
+3829:         if tmp_val > zmax:
    __pyx_t_4 = ((__pyx_v_tmp_val > __pyx_v_zmax) != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L7;
    }
+3830:             zmax = tmp_val
      __pyx_v_zmax = __pyx_v_tmp_val;
+3831:         elif tmp_val < zmin :
    __pyx_t_4 = ((__pyx_v_tmp_val < __pyx_v_zmin) != 0);
    if (__pyx_t_4) {
/* … */
    }
    __pyx_L7:;
  }
+3832:             zmin = tmp_val
      __pyx_v_zmin = __pyx_v_tmp_val;
+3833:     bounds[0] = xmin
  (__pyx_v_bounds[0]) = __pyx_v_xmin;
+3834:     bounds[1] = ymin
  (__pyx_v_bounds[1]) = __pyx_v_ymin;
+3835:     bounds[2] = zmin
  (__pyx_v_bounds[2]) = __pyx_v_zmin;
+3836:     bounds[3] = xmax
  (__pyx_v_bounds[3]) = __pyx_v_xmax;
+3837:     bounds[4] = ymax
  (__pyx_v_bounds[4]) = __pyx_v_ymax;
+3838:     bounds[5] = zmax
  (__pyx_v_bounds[5]) = __pyx_v_zmax;
+3839:     return
  goto __pyx_L0;
 3840: 
 3841: 
+3842: cdef inline void coordshift_simple1d(double[3] pts, bint in_is_cartesian=True,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_coordshift_simple1d(double *__pyx_v_pts, struct __pyx_opt_args_4tofu_4geom_5_GG03_coordshift_simple1d *__pyx_optional_args) {
  int __pyx_v_in_is_cartesian = ((int)1);
  double __pyx_v_CrossRef = ((double)0.);
  double __pyx_v_cos_phi = ((double)0.);
  double __pyx_v_sin_phi = ((double)0.);
  double __pyx_v_x;
  double __pyx_v_y;
  double __pyx_v_z;
  double __pyx_v_r;
  double __pyx_v_p;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_in_is_cartesian = __pyx_optional_args->in_is_cartesian;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_CrossRef = __pyx_optional_args->CrossRef;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_cos_phi = __pyx_optional_args->cos_phi;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_sin_phi = __pyx_optional_args->sin_phi;
          }
        }
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L0:;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_coordshift_simple1d {
  int __pyx_n;
  int in_is_cartesian;
  double CrossRef;
  double cos_phi;
  double sin_phi;
};
 3843:                                      double CrossRef=0., double cos_phi=0.,
 3844:                                      double sin_phi=0.) nogil:
 3845:     """
 3846:     Similar to coordshift but only pas from 3D cartesian to 3D toroidal
 3847:     coordinates or vice-versa.
 3848:     """
 3849:     cdef double x, y, z
 3850:     cdef double r, p
+3851:     if in_is_cartesian:
  __pyx_t_1 = (__pyx_v_in_is_cartesian != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3852:         if CrossRef==0.:
    __pyx_t_1 = ((__pyx_v_CrossRef == 0.) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+3853:             x = pts[0]
      __pyx_v_x = (__pyx_v_pts[0]);
+3854:             y = pts[1]
      __pyx_v_y = (__pyx_v_pts[1]);
+3855:             z = pts[2]
      __pyx_v_z = (__pyx_v_pts[2]);
+3856:             pts[0] = Csqrt(x*x+y*y)
      (__pyx_v_pts[0]) = sqrt(((__pyx_v_x * __pyx_v_x) + (__pyx_v_y * __pyx_v_y)));
+3857:             pts[1] = z
      (__pyx_v_pts[1]) = __pyx_v_z;
+3858:             pts[2] = Catan2(y,x)
      (__pyx_v_pts[2]) = atan2(__pyx_v_y, __pyx_v_x);
 3859:         else:
+3860:             x = pts[0]
    /*else*/ {
      __pyx_v_x = (__pyx_v_pts[0]);
+3861:             y = pts[1]
      __pyx_v_y = (__pyx_v_pts[1]);
+3862:             z = pts[2]
      __pyx_v_z = (__pyx_v_pts[2]);
+3863:             pts[0] = Csqrt(x*x+y*y)
      (__pyx_v_pts[0]) = sqrt(((__pyx_v_x * __pyx_v_x) + (__pyx_v_y * __pyx_v_y)));
+3864:             pts[1] = z
      (__pyx_v_pts[1]) = __pyx_v_z;
+3865:             pts[2] = CrossRef
      (__pyx_v_pts[2]) = __pyx_v_CrossRef;
    }
    __pyx_L4:;
 3866:     else:
+3867:         if CrossRef==0.:
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_CrossRef == 0.) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+3868:             r = pts[0]
      __pyx_v_r = (__pyx_v_pts[0]);
+3869:             z = pts[1]
      __pyx_v_z = (__pyx_v_pts[1]);
+3870:             p = pts[2]
      __pyx_v_p = (__pyx_v_pts[2]);
+3871:             pts[0] = r*Ccos(p)
      (__pyx_v_pts[0]) = (__pyx_v_r * cos(__pyx_v_p));
+3872:             pts[1] = r*Csin(p)
      (__pyx_v_pts[1]) = (__pyx_v_r * sin(__pyx_v_p));
+3873:             pts[2] = z
      (__pyx_v_pts[2]) = __pyx_v_z;
 3874:         else:
+3875:             r = pts[0]
    /*else*/ {
      __pyx_v_r = (__pyx_v_pts[0]);
+3876:             z = pts[1]
      __pyx_v_z = (__pyx_v_pts[1]);
+3877:             pts[0] = r*cos_phi
      (__pyx_v_pts[0]) = (__pyx_v_r * __pyx_v_cos_phi);
+3878:             pts[1] = r*sin_phi
      (__pyx_v_pts[1]) = (__pyx_v_r * __pyx_v_sin_phi);
+3879:             pts[2] = z
      (__pyx_v_pts[2]) = __pyx_v_z;
    }
    __pyx_L5:;
  }
  __pyx_L3:;
+3880:     return
  goto __pyx_L0;
 3881: 
 3882: 
 3883: 
+3884: def LOS_isVis_PtFromPts_VesStruct(double pt0, double pt1, double pt2,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_49LOS_isVis_PtFromPts_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_48LOS_isVis_PtFromPts_VesStruct[] = " Return an array of bool indices indicating whether each point in pts is\n    visible from Pt considering vignetting\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_49LOS_isVis_PtFromPts_VesStruct = {"LOS_isVis_PtFromPts_VesStruct", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_49LOS_isVis_PtFromPts_VesStruct, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_48LOS_isVis_PtFromPts_VesStruct};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_49LOS_isVis_PtFromPts_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_pt0;
  double __pyx_v_pt1;
  double __pyx_v_pt2;
  PyArrayObject *__pyx_v_k = 0;
  PyArrayObject *__pyx_v_pts = 0;
  PyArrayObject *__pyx_v_VPoly = 0;
  PyArrayObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_Lim = 0;
  PyObject *__pyx_v_LSPoly = 0;
  PyObject *__pyx_v_LSLim = 0;
  PyObject *__pyx_v_LSVIn = 0;
  PyObject *__pyx_v_RMin = 0;
  PyObject *__pyx_v_Forbid = 0;
  PyObject *__pyx_v_EpsUz = 0;
  PyObject *__pyx_v_EpsVz = 0;
  PyObject *__pyx_v_EpsA = 0;
  PyObject *__pyx_v_EpsB = 0;
  PyObject *__pyx_v_EpsPlane = 0;
  PyObject *__pyx_v_VType = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_isVis_PtFromPts_VesStruct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pt0,&__pyx_n_s_pt1,&__pyx_n_s_pt2,&__pyx_n_s_k,&__pyx_n_s_pts,&__pyx_n_s_VPoly,&__pyx_n_s_VIn,&__pyx_n_s_Lim,&__pyx_n_s_LSPoly,&__pyx_n_s_LSLim,&__pyx_n_s_LSVIn,&__pyx_n_s_RMin,&__pyx_n_s_Forbid,&__pyx_n_s_EpsUz,&__pyx_n_s_EpsVz,&__pyx_n_s_EpsA,&__pyx_n_s_EpsB,&__pyx_n_s_EpsPlane,&__pyx_n_s_VType,&__pyx_n_s_Test,0};
    PyObject* values[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_48LOS_isVis_PtFromPts_VesStruct(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_pt0, double __pyx_v_pt1, double __pyx_v_pt2, PyArrayObject *__pyx_v_k, PyArrayObject *__pyx_v_pts, PyArrayObject *__pyx_v_VPoly, PyArrayObject *__pyx_v_VIn, PyObject *__pyx_v_Lim, PyObject *__pyx_v_LSPoly, PyObject *__pyx_v_LSLim, PyObject *__pyx_v_LSVIn, PyObject *__pyx_v_RMin, PyObject *__pyx_v_Forbid, PyObject *__pyx_v_EpsUz, PyObject *__pyx_v_EpsVz, PyObject *__pyx_v_EpsA, PyObject *__pyx_v_EpsB, PyObject *__pyx_v_EpsPlane, PyObject *__pyx_v_VType, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_C0 = NULL;
  PyObject *__pyx_v_msg = NULL;
  PyObject *__pyx_v_C1 = NULL;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_npts;
  PyArrayObject *__pyx_v_Ds = 0;
  PyArrayObject *__pyx_v_dus = 0;
  PyObject *__pyx_v_POut = NULL;
  PyObject *__pyx_v_kPOut = NULL;
  PyObject *__pyx_v_lslim = NULL;
  PyObject *__pyx_v_pIn = NULL;
  PyObject *__pyx_v_kpin = NULL;
  PyObject *__pyx_v_indNoNan = NULL;
  PyObject *__pyx_v_indout = NULL;
  PyObject *__pyx_v_ind = NULL;
  PyObject *__pyx_v_indok = NULL;
  PyObject *__pyx_v_pp = NULL;
  PyObject *__pyx_v_ee = NULL;
  PyObject *__pyx_v_ll = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Ds;
  __Pyx_Buffer __pyx_pybuffer_Ds;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VIn;
  __Pyx_Buffer __pyx_pybuffer_VIn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPoly;
  __Pyx_Buffer __pyx_pybuffer_VPoly;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dus;
  __Pyx_Buffer __pyx_pybuffer_dus;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_k;
  __Pyx_Buffer __pyx_pybuffer_k;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pts;
  __Pyx_Buffer __pyx_pybuffer_pts;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_isVis_PtFromPts_VesStruct", 0);
  __Pyx_INCREF(__pyx_v_RMin);
  __pyx_pybuffer_Ds.pybuffer.buf = NULL;
  __pyx_pybuffer_Ds.refcount = 0;
  __pyx_pybuffernd_Ds.data = NULL;
  __pyx_pybuffernd_Ds.rcbuffer = &__pyx_pybuffer_Ds;
  __pyx_pybuffer_dus.pybuffer.buf = NULL;
  __pyx_pybuffer_dus.refcount = 0;
  __pyx_pybuffernd_dus.data = NULL;
  __pyx_pybuffernd_dus.rcbuffer = &__pyx_pybuffer_dus;
  __pyx_pybuffer_k.pybuffer.buf = NULL;
  __pyx_pybuffer_k.refcount = 0;
  __pyx_pybuffernd_k.data = NULL;
  __pyx_pybuffernd_k.rcbuffer = &__pyx_pybuffer_k;
  __pyx_pybuffer_pts.pybuffer.buf = NULL;
  __pyx_pybuffer_pts.refcount = 0;
  __pyx_pybuffernd_pts.data = NULL;
  __pyx_pybuffernd_pts.rcbuffer = &__pyx_pybuffer_pts;
  __pyx_pybuffer_VPoly.pybuffer.buf = NULL;
  __pyx_pybuffer_VPoly.refcount = 0;
  __pyx_pybuffernd_VPoly.data = NULL;
  __pyx_pybuffernd_VPoly.rcbuffer = &__pyx_pybuffer_VPoly;
  __pyx_pybuffer_VIn.pybuffer.buf = NULL;
  __pyx_pybuffer_VIn.refcount = 0;
  __pyx_pybuffernd_VIn.data = NULL;
  __pyx_pybuffernd_VIn.rcbuffer = &__pyx_pybuffer_VIn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_k.rcbuffer->pybuffer, (PyObject*)__pyx_v_k, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 3884, __pyx_L1_error)
  }
  __pyx_pybuffernd_k.diminfo[0].strides = __pyx_pybuffernd_k.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_k.diminfo[0].shape = __pyx_pybuffernd_k.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 3884, __pyx_L1_error)
  }
  __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPoly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 3884, __pyx_L1_error)
  }
  __pyx_pybuffernd_VPoly.diminfo[0].strides = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPoly.diminfo[0].shape = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPoly.diminfo[1].strides = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPoly.diminfo[1].shape = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer, (PyObject*)__pyx_v_VIn, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 3884, __pyx_L1_error)
  }
  __pyx_pybuffernd_VIn.diminfo[0].strides = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VIn.diminfo[0].shape = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VIn.diminfo[1].strides = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VIn.diminfo[1].shape = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_18);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ds.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dus.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_k.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_isVis_PtFromPts_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ds.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dus.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_k.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_C0);
  __Pyx_XDECREF(__pyx_v_msg);
  __Pyx_XDECREF(__pyx_v_C1);
  __Pyx_XDECREF((PyObject *)__pyx_v_Ds);
  __Pyx_XDECREF((PyObject *)__pyx_v_dus);
  __Pyx_XDECREF(__pyx_v_POut);
  __Pyx_XDECREF(__pyx_v_kPOut);
  __Pyx_XDECREF(__pyx_v_lslim);
  __Pyx_XDECREF(__pyx_v_pIn);
  __Pyx_XDECREF(__pyx_v_kpin);
  __Pyx_XDECREF(__pyx_v_indNoNan);
  __Pyx_XDECREF(__pyx_v_indout);
  __Pyx_XDECREF(__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_indok);
  __Pyx_XDECREF(__pyx_v_pp);
  __Pyx_XDECREF(__pyx_v_ee);
  __Pyx_XDECREF(__pyx_v_ll);
  __Pyx_XDECREF(__pyx_v_RMin);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__206 = PyTuple_Pack(40, __pyx_n_s_pt0, __pyx_n_s_pt1, __pyx_n_s_pt2, __pyx_n_s_k, __pyx_n_s_pts, __pyx_n_s_VPoly, __pyx_n_s_VIn, __pyx_n_s_Lim, __pyx_n_s_LSPoly, __pyx_n_s_LSLim, __pyx_n_s_LSVIn, __pyx_n_s_RMin, __pyx_n_s_Forbid, __pyx_n_s_EpsUz, __pyx_n_s_EpsVz, __pyx_n_s_EpsA, __pyx_n_s_EpsB, __pyx_n_s_EpsPlane, __pyx_n_s_VType, __pyx_n_s_Test, __pyx_n_s_C0, __pyx_n_s_msg, __pyx_n_s_C1, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_npts, __pyx_n_s_Ds, __pyx_n_s_dus, __pyx_n_s_POut, __pyx_n_s_kPOut, __pyx_n_s_lslim, __pyx_n_s_pIn, __pyx_n_s_kpin, __pyx_n_s_indNoNan, __pyx_n_s_indout, __pyx_n_s_ind, __pyx_n_s_indok, __pyx_n_s_pp, __pyx_n_s_ee, __pyx_n_s_ll); if (unlikely(!__pyx_tuple__206)) __PYX_ERR(0, 3884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__206);
  __Pyx_GIVEREF(__pyx_tuple__206);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_49LOS_isVis_PtFromPts_VesStruct, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3884, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct, __pyx_t_1) < 0) __PYX_ERR(0, 3884, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__207 = (PyObject*)__Pyx_PyCode_New(20, 0, 40, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__206, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct, 3884, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__207)) __PYX_ERR(0, 3884, __pyx_L1_error)
 3885:                                   np.ndarray[double, ndim=1,mode='c'] k,
 3886:                                   np.ndarray[double, ndim=2,mode='c'] pts,
 3887:                                   np.ndarray[double, ndim=2,mode='c'] VPoly,
 3888:                                   np.ndarray[double, ndim=2,mode='c'] VIn,
+3889:                                   Lim=None, LSPoly=None, LSLim=None, LSVIn=None,
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
+3890:                                   RMin=None, Forbid=True, EpsUz=_SMALL,
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_True);
    values[13] = __pyx_k__80;
    values[14] = __pyx_k__81;
    values[15] = __pyx_k__82;
    values[16] = __pyx_k__83;
    values[17] = __pyx_k__84;
    values[18] = ((PyObject *)__pyx_n_s_Tor);
/* … */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__SMALL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__80 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+3891:                                   EpsVz=_VSMALL, EpsA=_VSMALL, EpsB=_VSMALL,
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__81 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__82 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__83 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
+3892:                                   EpsPlane=_VSMALL, VType='Tor', Test=True):
    values[19] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pt0)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pt1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 1); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pt2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 2); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_k)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 3); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pts)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 4); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 5); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, 6); __PYX_ERR(0, 3884, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Lim);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSPoly);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSLim);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSVIn);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RMin);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Forbid);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsUz);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsVz);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsA);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsB);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsPlane);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VType);
          if (value) { values[18] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 19:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[19] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_isVis_PtFromPts_VesStruct") < 0)) __PYX_ERR(0, 3884, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 20: values[19] = PyTuple_GET_ITEM(__pyx_args, 19);
        CYTHON_FALLTHROUGH;
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_pt0 = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_pt0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3884, __pyx_L3_error)
    __pyx_v_pt1 = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_pt1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3884, __pyx_L3_error)
    __pyx_v_pt2 = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_pt2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3884, __pyx_L3_error)
    __pyx_v_k = ((PyArrayObject *)values[3]);
    __pyx_v_pts = ((PyArrayObject *)values[4]);
    __pyx_v_VPoly = ((PyArrayObject *)values[5]);
    __pyx_v_VIn = ((PyArrayObject *)values[6]);
    __pyx_v_Lim = values[7];
    __pyx_v_LSPoly = values[8];
    __pyx_v_LSLim = values[9];
    __pyx_v_LSVIn = values[10];
    __pyx_v_RMin = values[11];
    __pyx_v_Forbid = values[12];
    __pyx_v_EpsUz = values[13];
    __pyx_v_EpsVz = values[14];
    __pyx_v_EpsA = values[15];
    __pyx_v_EpsB = values[16];
    __pyx_v_EpsPlane = values[17];
    __pyx_v_VType = values[18];
    __pyx_v_Test = values[19];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_isVis_PtFromPts_VesStruct", 0, 7, 20, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3884, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_isVis_PtFromPts_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_k), __pyx_ptype_5numpy_ndarray, 1, "k", 0))) __PYX_ERR(0, 3885, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pts), __pyx_ptype_5numpy_ndarray, 1, "pts", 0))) __PYX_ERR(0, 3886, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VPoly), __pyx_ptype_5numpy_ndarray, 1, "VPoly", 0))) __PYX_ERR(0, 3887, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIn), __pyx_ptype_5numpy_ndarray, 1, "VIn", 0))) __PYX_ERR(0, 3888, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_48LOS_isVis_PtFromPts_VesStruct(__pyx_self, __pyx_v_pt0, __pyx_v_pt1, __pyx_v_pt2, __pyx_v_k, __pyx_v_pts, __pyx_v_VPoly, __pyx_v_VIn, __pyx_v_Lim, __pyx_v_LSPoly, __pyx_v_LSLim, __pyx_v_LSVIn, __pyx_v_RMin, __pyx_v_Forbid, __pyx_v_EpsUz, __pyx_v_EpsVz, __pyx_v_EpsA, __pyx_v_EpsB, __pyx_v_EpsPlane, __pyx_v_VType, __pyx_v_Test);
/* … */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__84 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
 3893:     """ Return an array of bool indices indicating whether each point in pts is
 3894:     visible from Pt considering vignetting
 3895:     """
+3896:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3896, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+3897:         C0 = (VPoly.shape[0]==2 and VIn.shape[0]==2
    __pyx_t_1 = ((__pyx_v_VPoly->dimensions[0]) == 2);
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3897, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
/* … */
    __pyx_t_1 = ((__pyx_v_VIn->dimensions[0]) == 2);
    if (__pyx_t_1) {
    } else {
/* … */
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3897, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L4_bool_binop_done;
    }
+3898:               and VIn.shape[1]==VPoly.shape[1]-1)
    __pyx_t_1 = ((__pyx_v_VIn->dimensions[1]) == ((__pyx_v_VPoly->dimensions[1]) - 1));
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L4_bool_binop_done:;
    __pyx_v_C0 = __pyx_t_2;
    __pyx_t_2 = 0;
+3899:         msg = "Args VPoly and VIn must be of the same shape (2,NS)!"
    __Pyx_INCREF(__pyx_kp_s_Args_VPoly_and_VIn_must_be_of_th);
    __pyx_v_msg = __pyx_kp_s_Args_VPoly_and_VIn_must_be_of_th;
+3900:         assert C0, msg
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3900, __pyx_L1_error)
      if (unlikely(!__pyx_t_1)) {
        __pyx_t_2 = PyTuple_Pack(1, __pyx_v_msg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3900, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 3900, __pyx_L1_error)
      }
    }
    #endif
+3901:         C0 = all([pp is None for pp in [LSPoly,LSLim,LSVIn]])
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_LSPoly);
    __Pyx_GIVEREF(__pyx_v_LSPoly);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_LSPoly);
    __Pyx_INCREF(__pyx_v_LSLim);
    __Pyx_GIVEREF(__pyx_v_LSLim);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_LSLim);
    __Pyx_INCREF(__pyx_v_LSVIn);
    __Pyx_GIVEREF(__pyx_v_LSVIn);
    PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_LSVIn);
    __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    for (;;) {
      if (__pyx_t_5 >= 3) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_3); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3901, __pyx_L1_error)
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3901, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_1 = (__pyx_v_pp == Py_None);
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3901, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 3901, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_C0, __pyx_t_4);
    __pyx_t_4 = 0;
+3902:         C1 = all([hasattr(pp,'__iter__') and len(pp)==len(LSPoly)
    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
/* … */
      __pyx_t_1 = __Pyx_HasAttr(__pyx_v_pp, __pyx_n_s_iter); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3902, __pyx_L1_error)
      if (__pyx_t_1) {
      } else {
        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3902, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_2 = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_7 = PyObject_Length(__pyx_v_pp); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3902, __pyx_L1_error)
      __pyx_t_8 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3902, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_7 == __pyx_t_8);
      __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3902, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      __pyx_L11_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 3902, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_C1 = __pyx_t_3;
    __pyx_t_3 = 0;
+3903:                   for pp in [LSPoly,LSLim,LSVIn]])
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_LSPoly);
    __Pyx_GIVEREF(__pyx_v_LSPoly);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_LSPoly);
    __Pyx_INCREF(__pyx_v_LSLim);
    __Pyx_GIVEREF(__pyx_v_LSLim);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_LSLim);
    __Pyx_INCREF(__pyx_v_LSVIn);
    __Pyx_GIVEREF(__pyx_v_LSVIn);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_LSVIn);
    __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (__pyx_t_5 >= 3) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_2); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3903, __pyx_L1_error)
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3903, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_2);
      __pyx_t_2 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+3904:         msg = "Args LSPoly,LSLim,LSVIn must be None or lists of same len()!"
    __Pyx_INCREF(__pyx_kp_s_Args_LSPoly_LSLim_LSVIn_must_be);
    __Pyx_DECREF_SET(__pyx_v_msg, __pyx_kp_s_Args_LSPoly_LSLim_LSVIn_must_be);
+3905:         assert C0 or C1, msg
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3905, __pyx_L1_error)
      if (!__pyx_t_9) {
      } else {
        __pyx_t_1 = __pyx_t_9;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_C1); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3905, __pyx_L1_error)
      __pyx_t_1 = __pyx_t_9;
      __pyx_L13_bool_binop_done:;
      if (unlikely(!__pyx_t_1)) {
        __pyx_t_3 = PyTuple_Pack(1, __pyx_v_msg); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3905, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __PYX_ERR(0, 3905, __pyx_L1_error)
      }
    }
    #endif
+3906:         C0 = RMin is None or type(RMin) in [float,int,np.float64,np.int64]
    __pyx_t_1 = (__pyx_v_RMin == Py_None);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3906, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L15_bool_binop_done;
    }
    __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_RMin)));
    __pyx_t_4 = ((PyObject *)Py_TYPE(__pyx_v_RMin));
    __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_t_4), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_9) {
    } else {
      __pyx_t_1 = __pyx_t_9;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_t_4), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_9) {
    } else {
      __pyx_t_1 = __pyx_t_9;
      goto __pyx_L17_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_t_4), __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!__pyx_t_9) {
    } else {
      __pyx_t_1 = __pyx_t_9;
      goto __pyx_L17_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyObject_RichCompare(((PyObject *)__pyx_t_4), __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_9;
    __pyx_L17_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = __pyx_t_1;
    __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
    __pyx_L15_bool_binop_done:;
    __Pyx_DECREF_SET(__pyx_v_C0, __pyx_t_3);
    __pyx_t_3 = 0;
+3907:         assert msg, "Arg RMin must be None or a float!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_msg); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3907, __pyx_L1_error)
      if (unlikely(!__pyx_t_9)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_RMin_must_be_None_or_a_float);
        __PYX_ERR(0, 3907, __pyx_L1_error)
      }
    }
    #endif
+3908:         assert type(Forbid) is bool, "Arg Forbid must be a bool!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_9 = (((PyObject *)Py_TYPE(__pyx_v_Forbid)) == ((PyObject *)__pyx_ptype_7cpython_4bool_bool));
      if (unlikely(!(__pyx_t_9 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Forbid_must_be_a_bool);
        __PYX_ERR(0, 3908, __pyx_L1_error)
      }
    }
    #endif
+3909:         C0 = all([type(ee) in [int,float,np.int64,np.float64] and ee<1.e-4
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
      __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_ee)));
      __pyx_t_6 = ((PyObject *)Py_TYPE(__pyx_v_ee));
      __pyx_t_10 = PyObject_RichCompare(((PyObject *)__pyx_t_6), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_9 = __pyx_t_1;
        goto __pyx_L25_bool_binop_done;
      }
      __pyx_t_10 = PyObject_RichCompare(((PyObject *)__pyx_t_6), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_9 = __pyx_t_1;
        goto __pyx_L25_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_int64); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyObject_RichCompare(((PyObject *)__pyx_t_6), __pyx_t_11, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (!__pyx_t_1) {
      } else {
        __pyx_t_9 = __pyx_t_1;
        goto __pyx_L25_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_float64); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyObject_RichCompare(((PyObject *)__pyx_t_6), __pyx_t_11, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_9 = __pyx_t_1;
      __pyx_L25_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_1 = __pyx_t_9;
      if (__pyx_t_1) {
      } else {
        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3909, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_4 = __pyx_t_6;
        __pyx_t_6 = 0;
        goto __pyx_L23_bool_binop_done;
      }
      __pyx_t_6 = PyObject_RichCompare(__pyx_v_ee, __pyx_float_1_eneg_4, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_4 = __pyx_t_6;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_L23_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 3909, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_C0, __pyx_t_2);
    __pyx_t_2 = 0;
+3910:                   for ee in [EpsUz,EpsVz,EpsA,EpsB,EpsPlane]])
    __pyx_t_4 = PyTuple_New(5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3910, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v_EpsUz);
    __Pyx_GIVEREF(__pyx_v_EpsUz);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_EpsUz);
    __Pyx_INCREF(__pyx_v_EpsVz);
    __Pyx_GIVEREF(__pyx_v_EpsVz);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_EpsVz);
    __Pyx_INCREF(__pyx_v_EpsA);
    __Pyx_GIVEREF(__pyx_v_EpsA);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_EpsA);
    __Pyx_INCREF(__pyx_v_EpsB);
    __Pyx_GIVEREF(__pyx_v_EpsB);
    PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_EpsB);
    __Pyx_INCREF(__pyx_v_EpsPlane);
    __Pyx_GIVEREF(__pyx_v_EpsPlane);
    PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_v_EpsPlane);
    __pyx_t_2 = __pyx_t_4; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (__pyx_t_5 >= 5) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_4); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 3910, __pyx_L1_error)
      #else
      __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3910, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_ee, __pyx_t_4);
      __pyx_t_4 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+3911:         assert C0, "Args [EpsUz,EpsVz,EpsA,EpsB] must be floats < 1.e-4!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3911, __pyx_L1_error)
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_EpsUz_EpsVz_EpsA_EpsB_must);
        __PYX_ERR(0, 3911, __pyx_L1_error)
      }
    }
    #endif
+3912:         C0 = type(VType) is str and VType.lower() in ['tor','lin']
    __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_VType)) == ((PyObject *)(&PyString_Type)));
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3912, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L29_bool_binop_done;
    }
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3912, __pyx_L1_error)
    if (!__pyx_t_9) {
    } else {
      __pyx_t_1 = __pyx_t_9;
      goto __pyx_L31_bool_binop_done;
    }
    __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_lin, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_9;
    __pyx_L31_bool_binop_done:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = __pyx_t_1;
    __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
    __pyx_L29_bool_binop_done:;
    __Pyx_DECREF_SET(__pyx_v_C0, __pyx_t_2);
    __pyx_t_2 = 0;
+3913:         assert C0, "Arg VType must be a str in ['Tor','Lin']!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3913, __pyx_L1_error)
      if (unlikely(!__pyx_t_9)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_VType_must_be_a_str_in_Tor_L_2);
        __PYX_ERR(0, 3913, __pyx_L1_error)
      }
    }
    #endif
 3914: 
+3915:     cdef int ii, jj, npts=pts.shape[1]
  __pyx_v_npts = (__pyx_v_pts->dimensions[1]);
 3916:     cdef np.ndarray[double, ndim=2, mode='c'] Ds, dus
+3917:     Ds = np.tile(np.r_[pt0,pt1,pt2], (npts,1)).T
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_tile); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_r_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_pt0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_pt1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyFloat_FromDouble(__pyx_v_pt2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_11);
  __pyx_t_3 = 0;
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_npts); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_12);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_1);
  __pyx_t_12 = 0;
  __pyx_t_12 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_6};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_11, __pyx_t_6};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_13, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_13, __pyx_t_6);
    __pyx_t_11 = 0;
    __pyx_t_6 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_T); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3917, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3917, __pyx_L1_error)
  __pyx_t_14 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Ds.rcbuffer->pybuffer);
    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Ds.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_13 < 0)) {
      PyErr_Fetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Ds.rcbuffer->pybuffer, (PyObject*)__pyx_v_Ds, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_15); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_17);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      }
      __pyx_t_15 = __pyx_t_16 = __pyx_t_17 = 0;
    }
    __pyx_pybuffernd_Ds.diminfo[0].strides = __pyx_pybuffernd_Ds.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Ds.diminfo[0].shape = __pyx_pybuffernd_Ds.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_Ds.diminfo[1].strides = __pyx_pybuffernd_Ds.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_Ds.diminfo[1].shape = __pyx_pybuffernd_Ds.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3917, __pyx_L1_error)
  }
  __pyx_t_14 = 0;
  __pyx_v_Ds = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
+3918:     dus = (pts-Ds)/k
  __pyx_t_4 = PyNumber_Subtract(((PyObject *)__pyx_v_pts), ((PyObject *)__pyx_v_Ds)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, ((PyObject *)__pyx_v_k)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3918, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 3918, __pyx_L1_error)
  __pyx_t_14 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dus.rcbuffer->pybuffer);
    __pyx_t_13 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dus.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack);
    if (unlikely(__pyx_t_13 < 0)) {
      PyErr_Fetch(&__pyx_t_17, &__pyx_t_16, &__pyx_t_15);
      if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dus.rcbuffer->pybuffer, (PyObject*)__pyx_v_dus, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) {
        Py_XDECREF(__pyx_t_17); Py_XDECREF(__pyx_t_16); Py_XDECREF(__pyx_t_15);
        __Pyx_RaiseBufferFallbackError();
      } else {
        PyErr_Restore(__pyx_t_17, __pyx_t_16, __pyx_t_15);
      }
      __pyx_t_17 = __pyx_t_16 = __pyx_t_15 = 0;
    }
    __pyx_pybuffernd_dus.diminfo[0].strides = __pyx_pybuffernd_dus.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dus.diminfo[0].shape = __pyx_pybuffernd_dus.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dus.diminfo[1].strides = __pyx_pybuffernd_dus.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dus.diminfo[1].shape = __pyx_pybuffernd_dus.rcbuffer->pybuffer.shape[1];
    if (unlikely(__pyx_t_13 < 0)) __PYX_ERR(0, 3918, __pyx_L1_error)
  }
  __pyx_t_14 = 0;
  __pyx_v_dus = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 3919: 
+3920:     if VType.lower()=='tor':
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_10) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3920, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L33;
  }
 3921:         # RMin is necessary to avoid looking on the other side of the tokamak
+3922:         if RMin is None:
    __pyx_t_9 = (__pyx_v_RMin == Py_None);
    __pyx_t_1 = (__pyx_t_9 != 0);
    if (__pyx_t_1) {
/* … */
    }
+3923:             RMin = 0.95*min(np.min(VPoly[0,:]),
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_min); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_VPoly), __pyx_tuple__36); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_18 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_18)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_18);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_10 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_18, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_2 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3923, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF_SET(__pyx_v_RMin, __pyx_t_2);
      __pyx_t_2 = 0;
+3924:                             np.min(np.hypot(Ds[0,:],Ds[1,:])))
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_min); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_hypot); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Ds), __pyx_tuple__36); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_12 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_Ds), __pyx_tuple__42); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_3 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_3)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_12};
        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_6, __pyx_t_12};
        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      {
        __pyx_t_18 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3924, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        if (__pyx_t_3) {
          __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_3); __pyx_t_3 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_13, __pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_13, __pyx_t_12);
        __pyx_t_6 = 0;
        __pyx_t_12 = 0;
        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_18, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
        }
      }
      __pyx_t_2 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_11, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_4);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
      __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3924, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      if (__pyx_t_1) {
        __Pyx_INCREF(__pyx_t_2);
        __pyx_t_11 = __pyx_t_2;
      } else {
        __Pyx_INCREF(__pyx_t_10);
        __pyx_t_11 = __pyx_t_10;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 3925: 
 3926:         # Main function to compute intersections with Vessel
+3927:         POut = Calc_LOS_PInOut_Tor(Ds, dus, VPoly, VIn, Lim=Lim, Forbid=Forbid,
    __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_Ds), PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_dus), PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VIn), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 3927, __pyx_L1_error)
    if (!(likely(((__pyx_v_Forbid) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_Forbid, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 3927, __pyx_L1_error)
/* … */
    __pyx_t_28.__pyx_n = 8;
    __pyx_t_28.Lim = __pyx_v_Lim;
    __pyx_t_28.Forbid = ((PyBoolObject *)__pyx_v_Forbid);
    __pyx_t_28.RMin = __pyx_v_RMin;
    __pyx_t_28.EpsUz = __pyx_t_23;
    __pyx_t_28.EpsVz = __pyx_t_24;
    __pyx_t_28.EpsA = __pyx_t_25;
    __pyx_t_28.EpsB = __pyx_t_26;
    __pyx_t_28.EpsPlane = __pyx_t_27;
    __pyx_t_2 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor(__pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, &__pyx_t_28); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3927, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
    __pyx_t_19.memview = NULL;
    __pyx_t_19.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
    __pyx_t_20.memview = NULL;
    __pyx_t_20.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
    __pyx_t_21.memview = NULL;
    __pyx_t_21.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
    __pyx_t_22.memview = NULL;
    __pyx_t_22.data = NULL;
+3928:                                    RMin=RMin, EpsUz=EpsUz, EpsVz=EpsVz,
    __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsUz); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3928, __pyx_L1_error)
    __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_v_EpsVz); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3928, __pyx_L1_error)
+3929:                                    EpsA=EpsA, EpsB=EpsB, EpsPlane=EpsPlane)[1]
    __pyx_t_25 = __pyx_PyFloat_AsDouble(__pyx_v_EpsA); if (unlikely((__pyx_t_25 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3929, __pyx_L1_error)
    __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_v_EpsB); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3929, __pyx_L1_error)
    __pyx_t_27 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_27 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3929, __pyx_L1_error)
/* … */
    __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_POut = __pyx_t_11;
    __pyx_t_11 = 0;
 3930: 
 3931:         # k = coordinate (in m) along the line from D
+3932:         kPOut = np.sqrt(np.sum((POut-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_Subtract(__pyx_v_POut, ((PyObject *)__pyx_v_Ds)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_18 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_18);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_18);
    __pyx_t_18 = 0;
    __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3932, __pyx_L1_error)
    __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_18); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __pyx_t_18 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_18)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_18);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_11 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_18, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_12);
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_v_kPOut = __pyx_t_11;
    __pyx_t_11 = 0;
+3933:         assert np.allclose(kPOut,np.sum((POut-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_allclose); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sum); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyNumber_Subtract(__pyx_v_POut, ((PyObject *)__pyx_v_Ds)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_18 = PyNumber_Multiply(__pyx_t_11, ((PyObject *)__pyx_v_dus)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_GIVEREF(__pyx_t_18);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_18);
      __pyx_t_18 = 0;
      __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3933, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_11, __pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __pyx_t_18 = PyTuple_New(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_INCREF(__pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_v_kPOut);
      PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_t_2);
      PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 3933, __pyx_L1_error)
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_18, __pyx_t_2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3933, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_1)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 3933, __pyx_L1_error)
      }
    }
    #endif
 3934:         # Structural optimzation : do everything in one big for loop and only
 3935:         # keep the relevant points (to save memory)
+3936:         if LSPoly is not None:
    __pyx_t_1 = (__pyx_v_LSPoly != Py_None);
    __pyx_t_9 = (__pyx_t_1 != 0);
    if (__pyx_t_9) {
/* … */
    }
+3937:             for ii in range(0,len(LSPoly)):
      __pyx_t_5 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3937, __pyx_L1_error)
      __pyx_t_8 = __pyx_t_5;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_8; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+3938:                 C0 = not all([hasattr(ll,'__iter__') for ll in LSLim[ii]])
        __pyx_t_11 = PyList_New(0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) {
          __pyx_t_18 = __pyx_t_2; __Pyx_INCREF(__pyx_t_18); __pyx_t_7 = 0;
          __pyx_t_29 = NULL;
        } else {
          __pyx_t_7 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3938, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_29 = Py_TYPE(__pyx_t_18)->tp_iternext; if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3938, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        for (;;) {
          if (likely(!__pyx_t_29)) {
            if (likely(PyList_CheckExact(__pyx_t_18))) {
              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_2 = PyList_GET_ITEM(__pyx_t_18, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 3938, __pyx_L1_error)
              #else
              __pyx_t_2 = PySequence_ITEM(__pyx_t_18, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3938, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              #endif
            } else {
              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 3938, __pyx_L1_error)
              #else
              __pyx_t_2 = PySequence_ITEM(__pyx_t_18, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3938, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              #endif
            }
          } else {
            __pyx_t_2 = __pyx_t_29(__pyx_t_18);
            if (unlikely(!__pyx_t_2)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 3938, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_2);
          }
          __Pyx_XDECREF_SET(__pyx_v_ll, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_9 = __Pyx_HasAttr(__pyx_v_ll, __pyx_n_s_iter); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 3938, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3938, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_11, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 3938, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_11); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = __Pyx_PyBool_FromLong((!__pyx_t_9)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_XDECREF_SET(__pyx_v_C0, __pyx_t_18);
        __pyx_t_18 = 0;
+3939:                 if LSLim[ii] is None or C0:
        __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3939, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_1 = (__pyx_t_18 == Py_None);
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_30 = (__pyx_t_1 != 0);
        if (!__pyx_t_30) {
        } else {
          __pyx_t_9 = __pyx_t_30;
          goto __pyx_L41_bool_binop_done;
        }
        __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3939, __pyx_L1_error)
        __pyx_t_9 = __pyx_t_30;
        __pyx_L41_bool_binop_done:;
        if (__pyx_t_9) {
/* … */
          goto __pyx_L40;
        }
+3940:                     lslim = [LSLim[ii]]
          __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3940, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_11 = PyList_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3940, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_18);
          PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_18);
          __pyx_t_18 = 0;
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_11);
          __pyx_t_11 = 0;
 3941:                 else:
+3942:                     lslim = LSLim[ii]
        /*else*/ {
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3942, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_11);
          __pyx_t_11 = 0;
        }
        __pyx_L40:;
+3943:                 for jj in range(0,len(lslim)):
        __pyx_t_7 = PyObject_Length(__pyx_v_lslim); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3943, __pyx_L1_error)
        __pyx_t_31 = __pyx_t_7;
        for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
          __pyx_v_jj = __pyx_t_32;
+3944:                     pIn = Calc_LOS_PInOut_Tor(Ds, dus, LSPoly[ii], LSVIn[ii],
          __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_Ds), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_dus), PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_LSPoly, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_LSVIn, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_11, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
          __pyx_t_28.__pyx_n = 8;
          __pyx_t_28.Lim = __pyx_t_11;
          __pyx_t_28.Forbid = ((PyBoolObject *)__pyx_v_Forbid);
          __pyx_t_28.RMin = __pyx_v_RMin;
          __pyx_t_28.EpsUz = __pyx_t_27;
          __pyx_t_28.EpsVz = __pyx_t_26;
          __pyx_t_28.EpsA = __pyx_t_25;
          __pyx_t_28.EpsB = __pyx_t_24;
          __pyx_t_28.EpsPlane = __pyx_t_23;
          __pyx_t_18 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor(__pyx_t_22, __pyx_t_21, __pyx_t_20, __pyx_t_19, &__pyx_t_28); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3944, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
          __pyx_t_22.memview = NULL;
          __pyx_t_22.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
          __pyx_t_21.memview = NULL;
          __pyx_t_21.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
          __pyx_t_20.memview = NULL;
          __pyx_t_20.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
          __pyx_t_19.memview = NULL;
          __pyx_t_19.data = NULL;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3945:                                               Lim=lslim[jj], Forbid=Forbid,
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3945, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (!(likely(((__pyx_v_Forbid) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_Forbid, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 3945, __pyx_L1_error)
+3946:                                               RMin=RMin, EpsUz=EpsUz,
          __pyx_t_27 = __pyx_PyFloat_AsDouble(__pyx_v_EpsUz); if (unlikely((__pyx_t_27 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3946, __pyx_L1_error)
+3947:                                               EpsVz=EpsVz, EpsA=EpsA, EpsB=EpsB,
          __pyx_t_26 = __pyx_PyFloat_AsDouble(__pyx_v_EpsVz); if (unlikely((__pyx_t_26 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3947, __pyx_L1_error)
          __pyx_t_25 = __pyx_PyFloat_AsDouble(__pyx_v_EpsA); if (unlikely((__pyx_t_25 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3947, __pyx_L1_error)
          __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_v_EpsB); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3947, __pyx_L1_error)
+3948:                                               EpsPlane=EpsPlane)[0]
          __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3948, __pyx_L1_error)
/* … */
          __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_18, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3948, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pIn, __pyx_t_11);
          __pyx_t_11 = 0;
+3949:                     kpin = np.sqrt(np.sum((Ds-pIn)**2,axis=0))
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = PyNumber_Subtract(((PyObject *)__pyx_v_Ds), __pyx_v_pIn); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_12 = PyNumber_Power(__pyx_t_18, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3949, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_18, __pyx_t_12); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_11 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_12, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3949, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kpin, __pyx_t_11);
          __pyx_t_11 = 0;
+3950:                     indNoNan = (~np.isnan(kpin)) & (~np.isnan(kPOut))
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          __pyx_t_11 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyNumber_Invert(__pyx_t_11); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_11 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_2, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyNumber_Invert(__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyNumber_And(__pyx_t_4, __pyx_t_12); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3950, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indNoNan, __pyx_t_11);
          __pyx_t_11 = 0;
+3951:                     indout = np.zeros((npts,),dtype=bool)
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_npts); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 3951, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_11, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3951, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indout, __pyx_t_2);
          __pyx_t_2 = 0;
+3952:                     indout[indNoNan] = kpin[indNoNan]<kPOut[indNoNan]
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indNoNan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3952, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_kPOut, __pyx_v_indNoNan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3952, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_11 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3952, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_v_indNoNan, __pyx_t_11) < 0)) __PYX_ERR(0, 3952, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+3953:                     indout[(~np.isnan(kpin)) & np.isnan(kPOut)] = True
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isnan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_11 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Invert(__pyx_t_11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isnan); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_11 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_4, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyNumber_And(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_t_12, Py_True) < 0)) __PYX_ERR(0, 3953, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+3954:                     if np.any(indout):
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3954, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3954, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_12 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_11, __pyx_v_indout) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_indout);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3954, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3954, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_9) {
/* … */
          }
        }
      }
+3955:                         kPOut[indout] = kpin[indout]
            __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indout); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3955, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            if (unlikely(PyObject_SetItem(__pyx_v_kPOut, __pyx_v_indout, __pyx_t_12) < 0)) __PYX_ERR(0, 3955, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 3956:     else:
+3957:         POut = Calc_LOS_PInOut_Lin(Ds, dus, VPoly, VIn, Lim, EpsPlane=EpsPlane)[1]
  /*else*/ {
    __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_Ds), PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_dus), PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VIn), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3957, __pyx_L1_error)
    __pyx_t_33.__pyx_n = 1;
    __pyx_t_33.EpsPlane = __pyx_t_23;
    __pyx_t_12 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin(__pyx_t_19, __pyx_t_20, __pyx_t_21, __pyx_t_22, __pyx_v_Lim, &__pyx_t_33); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
    __pyx_t_19.memview = NULL;
    __pyx_t_19.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
    __pyx_t_20.memview = NULL;
    __pyx_t_20.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
    __pyx_t_21.memview = NULL;
    __pyx_t_21.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
    __pyx_t_22.memview = NULL;
    __pyx_t_22.data = NULL;
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_12, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3957, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_v_POut = __pyx_t_2;
    __pyx_t_2 = 0;
+3958:         kPOut = np.sqrt(np.sum((POut-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyNumber_Subtract(__pyx_v_POut, ((PyObject *)__pyx_v_Ds)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_18 = PyNumber_Power(__pyx_t_12, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_18);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_18);
    __pyx_t_18 = 0;
    __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_18);
    if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3958, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_12, __pyx_t_18); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    __pyx_t_18 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_18)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_18);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_2 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_18, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3958, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __pyx_v_kPOut = __pyx_t_2;
    __pyx_t_2 = 0;
+3959:         assert np.allclose(kPOut,np.sum((POut-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_allclose); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_Subtract(__pyx_v_POut, ((PyObject *)__pyx_v_Ds)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_18 = PyNumber_Multiply(__pyx_t_2, ((PyObject *)__pyx_v_dus)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_18);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_18);
      __pyx_t_18 = 0;
      __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3959, __pyx_L1_error)
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_2, __pyx_t_18); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __pyx_t_18 = PyTuple_New(2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_INCREF(__pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_v_kPOut);
      PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_12);
      __pyx_t_12 = 0;
      __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 3959, __pyx_L1_error)
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_18, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 3959, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_9)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 3959, __pyx_L1_error)
      }
    }
    #endif
+3960:         if LSPoly is not None:
    __pyx_t_9 = (__pyx_v_LSPoly != Py_None);
    __pyx_t_30 = (__pyx_t_9 != 0);
    if (__pyx_t_30) {
/* … */
    }
  }
  __pyx_L33:;
+3961:             for ii in range(0,len(LSPoly)):
      __pyx_t_5 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3961, __pyx_L1_error)
      __pyx_t_8 = __pyx_t_5;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_8; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+3962:                 C0 = not all([hasattr(ll,'__iter__') for ll in LSLim[ii]])
        __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3962, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3962, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (likely(PyList_CheckExact(__pyx_t_12)) || PyTuple_CheckExact(__pyx_t_12)) {
          __pyx_t_18 = __pyx_t_12; __Pyx_INCREF(__pyx_t_18); __pyx_t_7 = 0;
          __pyx_t_29 = NULL;
        } else {
          __pyx_t_7 = -1; __pyx_t_18 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3962, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_29 = Py_TYPE(__pyx_t_18)->tp_iternext; if (unlikely(!__pyx_t_29)) __PYX_ERR(0, 3962, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        for (;;) {
          if (likely(!__pyx_t_29)) {
            if (likely(PyList_CheckExact(__pyx_t_18))) {
              if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_12 = PyList_GET_ITEM(__pyx_t_18, __pyx_t_7); __Pyx_INCREF(__pyx_t_12); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 3962, __pyx_L1_error)
              #else
              __pyx_t_12 = PySequence_ITEM(__pyx_t_18, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3962, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_12);
              #endif
            } else {
              if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_18)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_18, __pyx_t_7); __Pyx_INCREF(__pyx_t_12); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 3962, __pyx_L1_error)
              #else
              __pyx_t_12 = PySequence_ITEM(__pyx_t_18, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3962, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_12);
              #endif
            }
          } else {
            __pyx_t_12 = __pyx_t_29(__pyx_t_18);
            if (unlikely(!__pyx_t_12)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 3962, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_12);
          }
          __Pyx_XDECREF_SET(__pyx_v_ll, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_30 = __Pyx_HasAttr(__pyx_v_ll, __pyx_n_s_iter); if (unlikely(__pyx_t_30 == ((int)-1))) __PYX_ERR(0, 3962, __pyx_L1_error)
          __pyx_t_12 = __Pyx_PyBool_FromLong(__pyx_t_30); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3962, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_12))) __PYX_ERR(0, 3962, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        }
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3962, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_18); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3962, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __pyx_t_18 = __Pyx_PyBool_FromLong((!__pyx_t_30)); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3962, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_18);
        __Pyx_XDECREF_SET(__pyx_v_C0, __pyx_t_18);
        __pyx_t_18 = 0;
+3963:                 lslim = [LSLim[ii]] if C0 else LSLim[ii]
        __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3963, __pyx_L1_error)
        if (__pyx_t_30) {
          __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3963, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_12 = PyList_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3963, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_2);
          PyList_SET_ITEM(__pyx_t_12, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_18 = __pyx_t_12;
          __pyx_t_12 = 0;
        } else {
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3963, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_18 = __pyx_t_12;
          __pyx_t_12 = 0;
        }
        __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_18);
        __pyx_t_18 = 0;
+3964:                 for jj in range(0,len(lslim)):
        __pyx_t_7 = PyObject_Length(__pyx_v_lslim); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3964, __pyx_L1_error)
        __pyx_t_31 = __pyx_t_7;
        for (__pyx_t_32 = 0; __pyx_t_32 < __pyx_t_31; __pyx_t_32+=1) {
          __pyx_v_jj = __pyx_t_32;
+3965:                     pIn = Calc_LOS_PInOut_Lin(Ds, dus, LSPoly[ii], LSVIn[ii],
          __pyx_t_22 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_Ds), PyBUF_WRITABLE); if (unlikely(!__pyx_t_22.memview)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __pyx_t_21 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_dus), PyBUF_WRITABLE); if (unlikely(!__pyx_t_21.memview)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_LSPoly, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_20 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_18, PyBUF_WRITABLE); if (unlikely(!__pyx_t_20.memview)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_LSVIn, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_18, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
/* … */
          __pyx_t_33.__pyx_n = 1;
          __pyx_t_33.EpsPlane = __pyx_t_23;
          __pyx_t_12 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin(__pyx_t_22, __pyx_t_21, __pyx_t_20, __pyx_t_19, __pyx_t_18, &__pyx_t_33); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3965, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __PYX_XDEC_MEMVIEW(&__pyx_t_22, 1);
          __pyx_t_22.memview = NULL;
          __pyx_t_22.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_21, 1);
          __pyx_t_21.memview = NULL;
          __pyx_t_21.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_20, 1);
          __pyx_t_20.memview = NULL;
          __pyx_t_20.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
          __pyx_t_19.memview = NULL;
          __pyx_t_19.data = NULL;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3966:                                               lslim[jj], EpsPlane=EpsPlane)[0]
          __pyx_t_18 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3966, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 3966, __pyx_L1_error)
/* … */
          __pyx_t_18 = __Pyx_GetItemInt(__pyx_t_12, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3966, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pIn, __pyx_t_18);
          __pyx_t_18 = 0;
+3967:                     kpin = np.sqrt(np.sum((Ds-pIn)**2,axis=0))
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sum); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyNumber_Subtract(((PyObject *)__pyx_v_Ds), __pyx_v_pIn); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_10 = PyNumber_Power(__pyx_t_12, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
          __pyx_t_10 = 0;
          __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 3967, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_12, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_10)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_10);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_18 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_10, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3967, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kpin, __pyx_t_18);
          __pyx_t_18 = 0;
+3968:                     indNoNan = (~np.isnan(kpin)) & (~np.isnan(kPOut))
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_4, function);
            }
          }
          __pyx_t_18 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyNumber_Invert(__pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_10);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_10, function);
            }
          }
          __pyx_t_18 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_2, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = PyNumber_Invert(__pyx_t_18); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = PyNumber_And(__pyx_t_4, __pyx_t_10); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3968, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indNoNan, __pyx_t_18);
          __pyx_t_18 = 0;
+3969:                     indout = np.zeros((npts,),dtype=bool)
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_zeros); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_npts); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_18);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_18);
          __pyx_t_18 = 0;
          __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 3969, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_18, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3969, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indout, __pyx_t_2);
          __pyx_t_2 = 0;
+3970:                     indout[indNoNan] = kpin[indNoNan]<kPOut[indNoNan]
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indNoNan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3970, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_kPOut, __pyx_v_indNoNan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3970, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_18 = PyObject_RichCompare(__pyx_t_2, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_18); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3970, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_v_indNoNan, __pyx_t_18) < 0)) __PYX_ERR(0, 3970, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
+3971:                     indout[(~np.isnan(kpin)) & np.isnan(kPOut)] = True
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isnan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_18 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Invert(__pyx_t_18); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_isnan); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
            __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_10);
            if (likely(__pyx_t_4)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
              __Pyx_INCREF(__pyx_t_4);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_10, function);
            }
          }
          __pyx_t_18 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_4, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_10 = PyNumber_And(__pyx_t_2, __pyx_t_18); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_t_10, Py_True) < 0)) __PYX_ERR(0, 3971, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+3972:                     if np.any(indout):
          __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3972, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_18);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3972, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __pyx_t_18 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_18)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_18);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_10 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_18, __pyx_v_indout) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_indout);
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3972, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_30 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_30 < 0)) __PYX_ERR(0, 3972, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          if (__pyx_t_30) {
/* … */
          }
        }
      }
+3973:                         kPOut[indout] = kpin[indout]
            __pyx_t_10 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indout); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3973, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_10);
            if (unlikely(PyObject_SetItem(__pyx_v_kPOut, __pyx_v_indout, __pyx_t_10) < 0)) __PYX_ERR(0, 3973, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
 3974: 
+3975:     ind = np.zeros((npts,),dtype=bool)
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_npts); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_18 = PyTuple_New(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_10);
  __pyx_t_10 = 0;
  __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_18);
  __pyx_t_18 = 0;
  __pyx_t_18 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  if (PyDict_SetItem(__pyx_t_18, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 3975, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_10, __pyx_t_18); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3975, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_v_ind = __pyx_t_4;
  __pyx_t_4 = 0;
+3976:     indok = (~np.isnan(k)) & (~np.isnan(kPOut))
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_isnan); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_4 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_18, ((PyObject *)__pyx_v_k)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_k));
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = PyNumber_Invert(__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_18, __pyx_n_s_np); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_18, __pyx_n_s_isnan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_18, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_kPOut);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Invert(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_And(__pyx_t_10, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_indok = __pyx_t_4;
  __pyx_t_4 = 0;
+3977:     ind[indok] = k[indok]<kPOut[indok]
  __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_k), __pyx_v_indok); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_kPOut, __pyx_v_indok); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 3977, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(PyObject_SetItem(__pyx_v_ind, __pyx_v_indok, __pyx_t_10) < 0)) __PYX_ERR(0, 3977, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+3978:     return ind
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ind);
  __pyx_r = __pyx_v_ind;
  goto __pyx_L0;
 3979: 
 3980: 
 3981: 
 3982: 
 3983: 
 3984: 
 3985: ######################################################################
 3986: #               Sampling
 3987: ######################################################################
 3988: 
 3989: @cython.cdivision(True)
 3990: @cython.wraparound(False)
 3991: @cython.boundscheck(False)
 3992: @cython.initializedcheck(False)
 3993: @cython.profile(False)
 3994: @cython.linetrace(False)
 3995: @cython.binding(False)
+3996: def LOS_get_sample(double[:,::1] Ds, double[:,::1] us, dL,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_51LOS_get_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_50LOS_get_sample[] = " Return the sampled line, with the specified method\n\n    'linspace': return the N+1 edges, including the first and last point\n    'sum' :     return N segments centers\n    'simps':    return N+1 egdes, N even (for scipy.integrate.simps)\n    'romb' :    return N+1 edges, N+1 = 2**k+1 (for scipy.integrate.romb)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_51LOS_get_sample = {"LOS_get_sample", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_51LOS_get_sample, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_50LOS_get_sample};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_51LOS_get_sample(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_Ds = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_us = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_dL = 0;
  __Pyx_memviewslice __pyx_v_DLs = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_dLMode = 0;
  PyObject *__pyx_v_method = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_get_sample (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Ds,&__pyx_n_s_us,&__pyx_n_s_dL,&__pyx_n_s_DLs,&__pyx_n_s_dLMode,&__pyx_n_s_method,&__pyx_n_s_Test,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[4] = ((PyObject*)__pyx_n_s_abs);
    values[5] = ((PyObject*)__pyx_n_s_sum);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_50LOS_get_sample(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, PyObject *__pyx_v_dL, __Pyx_memviewslice __pyx_v_DLs, PyObject *__pyx_v_dLMode, PyObject *__pyx_v_method, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_C0 = NULL;
  PyObject *__pyx_v_C1 = NULL;
  unsigned int __pyx_v_ii;
  unsigned int __pyx_v_jj;
  unsigned int __pyx_v_N;
  unsigned int __pyx_v_ND;
  double __pyx_v_kkk;
  double __pyx_v_D0;
  double __pyx_v_D1;
  double __pyx_v_D2;
  double __pyx_v_u0;
  double __pyx_v_u1;
  double __pyx_v_u2;
  double __pyx_v_dl0;
  double __pyx_v_dl;
  PyArrayObject *__pyx_v_dLr = 0;
  PyArrayObject *__pyx_v_kk = 0;
  PyArrayObject *__pyx_v_pts = 0;
  PyObject *__pyx_v_Pts = 0;
  PyObject *__pyx_v_k = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dLr;
  __Pyx_Buffer __pyx_pybuffer_dLr;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_kk;
  __Pyx_Buffer __pyx_pybuffer_kk;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pts;
  __Pyx_Buffer __pyx_pybuffer_pts;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_get_sample", 0);
  __Pyx_INCREF(__pyx_v_dLMode);
  __Pyx_INCREF(__pyx_v_method);
  __pyx_pybuffer_dLr.pybuffer.buf = NULL;
  __pyx_pybuffer_dLr.refcount = 0;
  __pyx_pybuffernd_dLr.data = NULL;
  __pyx_pybuffernd_dLr.rcbuffer = &__pyx_pybuffer_dLr;
  __pyx_pybuffer_kk.pybuffer.buf = NULL;
  __pyx_pybuffer_kk.refcount = 0;
  __pyx_pybuffernd_kk.data = NULL;
  __pyx_pybuffernd_kk.rcbuffer = &__pyx_pybuffer_kk;
  __pyx_pybuffer_pts.pybuffer.buf = NULL;
  __pyx_pybuffer_pts.refcount = 0;
  __pyx_pybuffernd_pts.data = NULL;
  __pyx_pybuffernd_pts.rcbuffer = &__pyx_pybuffer_pts;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_get_sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_C0);
  __Pyx_XDECREF(__pyx_v_C1);
  __Pyx_XDECREF((PyObject *)__pyx_v_dLr);
  __Pyx_XDECREF((PyObject *)__pyx_v_kk);
  __Pyx_XDECREF((PyObject *)__pyx_v_pts);
  __Pyx_XDECREF(__pyx_v_Pts);
  __Pyx_XDECREF(__pyx_v_k);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ds, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_us, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_DLs, 1);
  __Pyx_XDECREF(__pyx_v_dLMode);
  __Pyx_XDECREF(__pyx_v_method);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__208 = PyTuple_Pack(27, __pyx_n_s_Ds, __pyx_n_s_us, __pyx_n_s_dL, __pyx_n_s_DLs, __pyx_n_s_dLMode, __pyx_n_s_method, __pyx_n_s_Test, __pyx_n_s_C0, __pyx_n_s_C1, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_N, __pyx_n_s_ND, __pyx_n_s_kkk, __pyx_n_s_D0, __pyx_n_s_D1, __pyx_n_s_D2, __pyx_n_s_u0, __pyx_n_s_u1, __pyx_n_s_u2, __pyx_n_s_dl0, __pyx_n_s_dl, __pyx_n_s_dLr, __pyx_n_s_kk, __pyx_n_s_pts, __pyx_n_s_Pts, __pyx_n_s_k); if (unlikely(!__pyx_tuple__208)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__208);
  __Pyx_GIVEREF(__pyx_tuple__208);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_51LOS_get_sample, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_get_sample, __pyx_t_1) < 0) __PYX_ERR(0, 3996, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__209 = (PyObject*)__Pyx_PyCode_New(7, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__208, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_get_sample, 3996, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__209)) __PYX_ERR(0, 3996, __pyx_L1_error)
 3997:                    double[:,::1] DLs, str dLMode='abs', str method='sum',
+3998:                    Test=True):
    values[6] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ds)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_us)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_get_sample", 0, 4, 7, 1); __PYX_ERR(0, 3996, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_get_sample", 0, 4, 7, 2); __PYX_ERR(0, 3996, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DLs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_get_sample", 0, 4, 7, 3); __PYX_ERR(0, 3996, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dLMode);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_get_sample") < 0)) __PYX_ERR(0, 3996, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_Ds = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Ds.memview)) __PYX_ERR(0, 3996, __pyx_L3_error)
    __pyx_v_us = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_us.memview)) __PYX_ERR(0, 3996, __pyx_L3_error)
    __pyx_v_dL = values[2];
    __pyx_v_DLs = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_DLs.memview)) __PYX_ERR(0, 3997, __pyx_L3_error)
    __pyx_v_dLMode = ((PyObject*)values[4]);
    __pyx_v_method = ((PyObject*)values[5]);
    __pyx_v_Test = values[6];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_get_sample", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 3996, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_get_sample", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dLMode), (&PyString_Type), 1, "dLMode", 1))) __PYX_ERR(0, 3997, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 3997, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_50LOS_get_sample(__pyx_self, __pyx_v_Ds, __pyx_v_us, __pyx_v_dL, __pyx_v_DLs, __pyx_v_dLMode, __pyx_v_method, __pyx_v_Test);
 3999: 
 4000:     """ Return the sampled line, with the specified method
 4001: 
 4002:     'linspace': return the N+1 edges, including the first and last point
 4003:     'sum' :     return N segments centers
 4004:     'simps':    return N+1 egdes, N even (for scipy.integrate.simps)
 4005:     'romb' :    return N+1 edges, N+1 = 2**k+1 (for scipy.integrate.romb)
 4006:     """
+4007:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4007, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+4008:         assert Ds.shape[0]==us.shape[0]==3, "Args Ds, us - dim 0"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = ((__pyx_v_Ds.shape[0]) == (__pyx_v_us.shape[0]));
      if (__pyx_t_1) {
        __pyx_t_1 = ((__pyx_v_us.shape[0]) == 3);
      }
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_Ds_us_dim_0);
        __PYX_ERR(0, 4008, __pyx_L1_error)
      }
    }
    #endif
+4009:         assert DLs.shape[0]==2, "Arg DLs - dim 0"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!(((__pyx_v_DLs.shape[0]) == 2) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_DLs_dim_0);
        __PYX_ERR(0, 4009, __pyx_L1_error)
      }
    }
    #endif
+4010:         assert Ds.shape[1]==us.shape[1]==DLs.shape[1], "Args Ds, us, DLs 1"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = ((__pyx_v_Ds.shape[1]) == (__pyx_v_us.shape[1]));
      if (__pyx_t_1) {
        __pyx_t_1 = ((__pyx_v_us.shape[1]) == (__pyx_v_DLs.shape[1]));
      }
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_Ds_us_DLs_1);
        __PYX_ERR(0, 4010, __pyx_L1_error)
      }
    }
    #endif
+4011:         C0 = not hasattr(dL,'__iter__') and dL>0.
    __pyx_t_1 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4011, __pyx_L1_error)
    __pyx_t_3 = (!(__pyx_t_1 != 0));
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4011, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_dL, __pyx_float_0_, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4011, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_L4_bool_binop_done:;
    __pyx_v_C0 = __pyx_t_2;
    __pyx_t_2 = 0;
+4012:         C1 = hasattr(dL,'__iter__') and len(dL)==Ds.shape[1] and np.all(dL>0.)
    __pyx_t_3 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 4012, __pyx_L1_error)
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4012, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_5 = PyObject_Length(__pyx_v_dL); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4012, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_5 == (__pyx_v_Ds.shape[1]));
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4012, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L6_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4012, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_all); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4012, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_dL, __pyx_float_0_, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4012, __pyx_L1_error)
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4012, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_L6_bool_binop_done:;
    __pyx_v_C1 = __pyx_t_2;
    __pyx_t_2 = 0;
+4013:         assert C0 or C1, "Arg dL must be >0.!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4013, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C1); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4013, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L9_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_dL_must_be_0);
        __PYX_ERR(0, 4013, __pyx_L1_error)
      }
    }
    #endif
+4014:         assert dLMode.lower() in ['abs','rel'], "Arg dLMode in ['abs','rel']"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_dLMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4014, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_abs, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4014, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4014, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L11_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_dLMode_in_abs_rel);
        __PYX_ERR(0, 4014, __pyx_L1_error)
      }
    }
    #endif
+4015:         assert method.lower() in ['sum','simps','romb'], "Arg method"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4015, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4015, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4015, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_romb, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4015, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L13_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_method);
        __PYX_ERR(0, 4015, __pyx_L1_error)
      }
    }
    #endif
 4016: 
+4017:     cdef unsigned int ii, jj, N, ND = Ds.shape[1]
  __pyx_v_ND = (__pyx_v_Ds.shape[1]);
 4018:     cdef double kkk, D0, D1, D2, u0, u1, u2, dl0, dl
+4019:     cdef np.ndarray[double,ndim=1] dLr = np.empty((ND,),dtype=float)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ND); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4019, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4019, __pyx_L1_error)
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dLr.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_dLr = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4019, __pyx_L1_error)
    } else {__pyx_pybuffernd_dLr.diminfo[0].strides = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dLr.diminfo[0].shape = __pyx_pybuffernd_dLr.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_9 = 0;
  __pyx_v_dLr = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 4020:     cdef np.ndarray[double,ndim=1] kk
 4021:     cdef np.ndarray[double,ndim=2] pts
+4022:     cdef list Pts=[0 for ii in range(0,ND)], k=[0 for ii in range(0,ND)]
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = __pyx_v_ND;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_ii = __pyx_t_12;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 4022, __pyx_L1_error)
  }
  __pyx_v_Pts = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4022, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = __pyx_v_ND;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_ii = __pyx_t_12;
    if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_int_0))) __PYX_ERR(0, 4022, __pyx_L1_error)
  }
  __pyx_v_k = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
 4023: 
+4024:     dLMode = dLMode.lower()
  __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_dLMode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4024, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 4024, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_dLMode, ((PyObject*)__pyx_t_6));
  __pyx_t_6 = 0;
+4025:     method = method.lower()
  __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 4025, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_method, ((PyObject*)__pyx_t_6));
  __pyx_t_6 = 0;
 4026:     # Case with unique dL
+4027:     if not hasattr(dL,'__iter__'):
  __pyx_t_3 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 4027, __pyx_L1_error)
  __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L20;
  }
+4028:         if dLMode=='rel':
    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_dLMode, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4028, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L21;
    }
+4029:             N = <long>(Cceil(1./dL))
      __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_v_dL, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4029, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4029, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_N = ((long)ceil(__pyx_t_13));
+4030:             if method=='sum':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4030, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L22;
      }
+4031:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4032:                     dl0 = DLs[0,ii]
          __pyx_t_14 = 0;
          __pyx_t_15 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_14 * __pyx_v_DLs.strides[0]) )) + __pyx_t_15)) )));
+4033:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_16 = 1;
          __pyx_t_17 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_16 * __pyx_v_DLs.strides[0]) )) + __pyx_t_17)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4034:                     dLr[ii] = dl
          __pyx_t_18 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4035:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_19 = 0;
          __pyx_t_20 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_19 * __pyx_v_Ds.strides[0]) )) + __pyx_t_20)) )));
          __pyx_t_21 = 1;
          __pyx_t_22 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_21 * __pyx_v_Ds.strides[0]) )) + __pyx_t_22)) )));
          __pyx_t_24 = 2;
          __pyx_t_25 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_24 * __pyx_v_Ds.strides[0]) )) + __pyx_t_25)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4036:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_27 = 0;
          __pyx_t_28 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_27 * __pyx_v_us.strides[0]) )) + __pyx_t_28)) )));
          __pyx_t_29 = 1;
          __pyx_t_30 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_29 * __pyx_v_us.strides[0]) )) + __pyx_t_30)) )));
          __pyx_t_31 = 2;
          __pyx_t_32 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_31 * __pyx_v_us.strides[0]) )) + __pyx_t_32)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4037:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4037, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4037, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4037, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4038:                     kk = np.empty((N,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4038, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4038, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4038, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4038, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4039:                     for jj in range(0,N):
          __pyx_t_39 = __pyx_v_N;
          __pyx_t_40 = __pyx_t_39;
          for (__pyx_t_41 = 0; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
            __pyx_v_jj = __pyx_t_41;
+4040:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4041:                         kk[jj] = kkk
            __pyx_t_42 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_42, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4042:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_43 = 0;
            __pyx_t_44 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_44, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4043:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_45 = 1;
            __pyx_t_46 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4044:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_47 = 2;
            __pyx_t_48 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_47, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_48, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4045:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4045, __pyx_L1_error)
+4046:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4046, __pyx_L1_error)
        }
+4047:             elif method=='simps':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4047, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L22;
      }
+4048:                 N = N if N%2==0 else N+1
        if ((((__pyx_v_N % 2) == 0) != 0)) {
          __pyx_t_49 = __pyx_v_N;
        } else {
          __pyx_t_49 = (__pyx_v_N + 1);
        }
        __pyx_v_N = __pyx_t_49;
+4049:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4050:                     dl0 = DLs[0,ii]
          __pyx_t_50 = 0;
          __pyx_t_51 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_50 * __pyx_v_DLs.strides[0]) )) + __pyx_t_51)) )));
+4051:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_52 = 1;
          __pyx_t_53 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_52 * __pyx_v_DLs.strides[0]) )) + __pyx_t_53)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4052:                     dLr[ii] = dl
          __pyx_t_54 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4053:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_55 = 0;
          __pyx_t_56 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_55 * __pyx_v_Ds.strides[0]) )) + __pyx_t_56)) )));
          __pyx_t_57 = 1;
          __pyx_t_58 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_57 * __pyx_v_Ds.strides[0]) )) + __pyx_t_58)) )));
          __pyx_t_59 = 2;
          __pyx_t_60 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_59 * __pyx_v_Ds.strides[0]) )) + __pyx_t_60)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4054:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_61 = 0;
          __pyx_t_62 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_61 * __pyx_v_us.strides[0]) )) + __pyx_t_62)) )));
          __pyx_t_63 = 1;
          __pyx_t_64 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_63 * __pyx_v_us.strides[0]) )) + __pyx_t_64)) )));
          __pyx_t_65 = 2;
          __pyx_t_66 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_65 * __pyx_v_us.strides[0]) )) + __pyx_t_66)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4055:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4055, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4055, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4055, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4056:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4056, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4056, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4056, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4056, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4057:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4058:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4059:                         kk[jj] = kkk
            __pyx_t_68 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_68, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4060:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_69 = 0;
            __pyx_t_70 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4061:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_71 = 1;
            __pyx_t_72 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_71, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_72, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4062:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_73 = 2;
            __pyx_t_74 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_73, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_74, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4063:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4063, __pyx_L1_error)
+4064:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4064, __pyx_L1_error)
        }
 4065: 
 4066:             else:
+4067:                 N = 2**(<long>(Cceil(Clog2(<double>N))))
      /*else*/ {
        __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4068:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4069:                     dl0 = DLs[0,ii]
          __pyx_t_75 = 0;
          __pyx_t_76 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_75 * __pyx_v_DLs.strides[0]) )) + __pyx_t_76)) )));
+4070:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_77 = 1;
          __pyx_t_78 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_77 * __pyx_v_DLs.strides[0]) )) + __pyx_t_78)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4071:                     dLr[ii] = dl
          __pyx_t_79 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_79, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4072:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_80 = 0;
          __pyx_t_81 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_80 * __pyx_v_Ds.strides[0]) )) + __pyx_t_81)) )));
          __pyx_t_82 = 1;
          __pyx_t_83 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_82 * __pyx_v_Ds.strides[0]) )) + __pyx_t_83)) )));
          __pyx_t_84 = 2;
          __pyx_t_85 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_84 * __pyx_v_Ds.strides[0]) )) + __pyx_t_85)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4073:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_86 = 0;
          __pyx_t_87 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_86 * __pyx_v_us.strides[0]) )) + __pyx_t_87)) )));
          __pyx_t_88 = 1;
          __pyx_t_89 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_88 * __pyx_v_us.strides[0]) )) + __pyx_t_89)) )));
          __pyx_t_90 = 2;
          __pyx_t_91 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_90 * __pyx_v_us.strides[0]) )) + __pyx_t_91)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4074:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4074, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4074, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4074, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4074, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4075:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4075, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4075, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4075, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4075, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4076:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4077:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4078:                         kk[jj] = kkk
            __pyx_t_92 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_92, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4079:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_93 = 0;
            __pyx_t_94 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_93, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_94, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4080:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_95 = 1;
            __pyx_t_96 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_95, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_96, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4081:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_97 = 2;
            __pyx_t_98 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_97, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_98, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4082:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4082, __pyx_L1_error)
+4083:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4083, __pyx_L1_error)
        }
      }
      __pyx_L22:;
 4084: 
 4085:         else:
+4086:             if method=='sum':
    /*else*/ {
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4086, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L35;
      }
+4087:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4088:                     dl0 = DLs[0,ii]
          __pyx_t_99 = 0;
          __pyx_t_100 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_99 * __pyx_v_DLs.strides[0]) )) + __pyx_t_100)) )));
 4089:                     # Compute the number of intervals to satisfy the resolution
+4090:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_101 = 1;
          __pyx_t_102 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_101 * __pyx_v_DLs.strides[0]) )) + __pyx_t_102)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4090, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_dL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4090, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4090, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4091:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_103 = 1;
          __pyx_t_104 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_103 * __pyx_v_DLs.strides[0]) )) + __pyx_t_104)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4092:                     dLr[ii] = dl
          __pyx_t_105 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_105, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4093:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_106 = 0;
          __pyx_t_107 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_106 * __pyx_v_Ds.strides[0]) )) + __pyx_t_107)) )));
          __pyx_t_108 = 1;
          __pyx_t_109 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_108 * __pyx_v_Ds.strides[0]) )) + __pyx_t_109)) )));
          __pyx_t_110 = 2;
          __pyx_t_111 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_110 * __pyx_v_Ds.strides[0]) )) + __pyx_t_111)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4094:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_112 = 0;
          __pyx_t_113 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_112 * __pyx_v_us.strides[0]) )) + __pyx_t_113)) )));
          __pyx_t_114 = 1;
          __pyx_t_115 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_114 * __pyx_v_us.strides[0]) )) + __pyx_t_115)) )));
          __pyx_t_116 = 2;
          __pyx_t_117 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_116 * __pyx_v_us.strides[0]) )) + __pyx_t_117)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4095:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4095, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4095, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4095, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4095, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4096:                     kk = np.empty((N,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4096, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4096, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4096, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4096, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4097:                     for jj in range(0,N):
          __pyx_t_39 = __pyx_v_N;
          __pyx_t_40 = __pyx_t_39;
          for (__pyx_t_41 = 0; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
            __pyx_v_jj = __pyx_t_41;
+4098:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4099:                         kk[jj] = kkk
            __pyx_t_118 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_118, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4100:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_119 = 0;
            __pyx_t_120 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_119, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_120, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4101:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_121 = 1;
            __pyx_t_122 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_121, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_122, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4102:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_123 = 2;
            __pyx_t_124 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_123, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_124, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4103:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4103, __pyx_L1_error)
+4104:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4104, __pyx_L1_error)
        }
 4105: 
+4106:             elif method=='simps':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4106, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L35;
      }
+4107:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4108:                     dl0 = DLs[0,ii]
          __pyx_t_125 = 0;
          __pyx_t_126 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_125 * __pyx_v_DLs.strides[0]) )) + __pyx_t_126)) )));
 4109:                     # Compute the number of intervals to satisfy the resolution
+4110:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_127 = 1;
          __pyx_t_128 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_127 * __pyx_v_DLs.strides[0]) )) + __pyx_t_128)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4110, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_dL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4110, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4110, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4111:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_49 = __pyx_v_N;
          } else {
            __pyx_t_49 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_49;
+4112:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_129 = 1;
          __pyx_t_130 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_129 * __pyx_v_DLs.strides[0]) )) + __pyx_t_130)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4113:                     dLr[ii] = dl
          __pyx_t_131 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_131, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4114:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_132 = 0;
          __pyx_t_133 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_132 * __pyx_v_Ds.strides[0]) )) + __pyx_t_133)) )));
          __pyx_t_134 = 1;
          __pyx_t_135 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_134 * __pyx_v_Ds.strides[0]) )) + __pyx_t_135)) )));
          __pyx_t_136 = 2;
          __pyx_t_137 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_136 * __pyx_v_Ds.strides[0]) )) + __pyx_t_137)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4115:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_138 = 0;
          __pyx_t_139 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_138 * __pyx_v_us.strides[0]) )) + __pyx_t_139)) )));
          __pyx_t_140 = 1;
          __pyx_t_141 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_140 * __pyx_v_us.strides[0]) )) + __pyx_t_141)) )));
          __pyx_t_142 = 2;
          __pyx_t_143 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_142 * __pyx_v_us.strides[0]) )) + __pyx_t_143)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4116:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4116, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4116, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4116, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4116, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4117:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4117, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4117, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4117, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4117, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4118:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4119:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4120:                         kk[jj] = kkk
            __pyx_t_144 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_144, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4121:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_145 = 0;
            __pyx_t_146 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_145, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_146, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4122:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_147 = 1;
            __pyx_t_148 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_147, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_148, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4123:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_149 = 2;
            __pyx_t_150 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_149, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_150, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4124:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4124, __pyx_L1_error)
+4125:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4125, __pyx_L1_error)
        }
 4126: 
 4127:             else:
+4128:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4129:                     dl0 = DLs[0,ii]
          __pyx_t_151 = 0;
          __pyx_t_152 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_151 * __pyx_v_DLs.strides[0]) )) + __pyx_t_152)) )));
 4130:                     # Compute the number of intervals to satisfy the resolution
+4131:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_153 = 1;
          __pyx_t_154 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_153 * __pyx_v_DLs.strides[0]) )) + __pyx_t_154)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4131, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_dL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4131, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4131, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4132:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4133:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_155 = 1;
          __pyx_t_156 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_155 * __pyx_v_DLs.strides[0]) )) + __pyx_t_156)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4134:                     dLr[ii] = dl
          __pyx_t_157 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_157, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4135:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_158 = 0;
          __pyx_t_159 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_158 * __pyx_v_Ds.strides[0]) )) + __pyx_t_159)) )));
          __pyx_t_160 = 1;
          __pyx_t_161 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_160 * __pyx_v_Ds.strides[0]) )) + __pyx_t_161)) )));
          __pyx_t_162 = 2;
          __pyx_t_163 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_162 * __pyx_v_Ds.strides[0]) )) + __pyx_t_163)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4136:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_164 = 0;
          __pyx_t_165 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_164 * __pyx_v_us.strides[0]) )) + __pyx_t_165)) )));
          __pyx_t_166 = 1;
          __pyx_t_167 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_166 * __pyx_v_us.strides[0]) )) + __pyx_t_167)) )));
          __pyx_t_168 = 2;
          __pyx_t_169 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_168 * __pyx_v_us.strides[0]) )) + __pyx_t_169)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4137:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4137, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4137, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4137, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4138:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4138, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4138, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4138, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4138, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4139:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4140:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4141:                         kk[jj] = kkk
            __pyx_t_170 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_170, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4142:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_171 = 0;
            __pyx_t_172 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_171, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_172, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4143:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_173 = 1;
            __pyx_t_174 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_173, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_174, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4144:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_175 = 2;
            __pyx_t_176 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_175, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_176, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4145:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4145, __pyx_L1_error)
+4146:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4146, __pyx_L1_error)
        }
      }
      __pyx_L35:;
    }
    __pyx_L21:;
 4147: 
 4148:     # Case with different resolution for each LOS
 4149:     else:
+4150:         if dLMode=='rel':
  /*else*/ {
    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_dLMode, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4150, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_3 != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L48;
    }
+4151:             if method=='sum':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4151, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L49;
      }
+4152:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4153:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4153, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_7, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4153, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4153, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4154:                     dl0 = DLs[0,ii]
          __pyx_t_177 = 0;
          __pyx_t_178 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_177 * __pyx_v_DLs.strides[0]) )) + __pyx_t_178)) )));
+4155:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_179 = 1;
          __pyx_t_180 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_179 * __pyx_v_DLs.strides[0]) )) + __pyx_t_180)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4156:                     dLr[ii] = dl
          __pyx_t_181 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_181, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4157:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_182 = 0;
          __pyx_t_183 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_182 * __pyx_v_Ds.strides[0]) )) + __pyx_t_183)) )));
          __pyx_t_184 = 1;
          __pyx_t_185 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_184 * __pyx_v_Ds.strides[0]) )) + __pyx_t_185)) )));
          __pyx_t_186 = 2;
          __pyx_t_187 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_186 * __pyx_v_Ds.strides[0]) )) + __pyx_t_187)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4158:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_188 = 0;
          __pyx_t_189 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_188 * __pyx_v_us.strides[0]) )) + __pyx_t_189)) )));
          __pyx_t_190 = 1;
          __pyx_t_191 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_190 * __pyx_v_us.strides[0]) )) + __pyx_t_191)) )));
          __pyx_t_192 = 2;
          __pyx_t_193 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_192 * __pyx_v_us.strides[0]) )) + __pyx_t_193)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4159:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4159, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4159, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4159, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4159, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4160:                     kk = np.empty((N,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4160, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4160, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4160, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4160, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4161:                     for jj in range(0,N):
          __pyx_t_39 = __pyx_v_N;
          __pyx_t_40 = __pyx_t_39;
          for (__pyx_t_41 = 0; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
            __pyx_v_jj = __pyx_t_41;
+4162:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4163:                         kk[jj] = kkk
            __pyx_t_194 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_194, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4164:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_195 = 0;
            __pyx_t_196 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_195, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_196, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4165:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_197 = 1;
            __pyx_t_198 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_197, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_198, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4166:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_199 = 2;
            __pyx_t_200 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_199, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_200, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4167:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4167, __pyx_L1_error)
+4168:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4168, __pyx_L1_error)
        }
+4169:             elif method=='simps':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4169, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L49;
      }
+4170:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4171:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4171, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_7, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4171, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4171, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4172:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_49 = __pyx_v_N;
          } else {
            __pyx_t_49 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_49;
+4173:                     dl0 = DLs[0,ii]
          __pyx_t_201 = 0;
          __pyx_t_202 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_201 * __pyx_v_DLs.strides[0]) )) + __pyx_t_202)) )));
+4174:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_203 = 1;
          __pyx_t_204 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_203 * __pyx_v_DLs.strides[0]) )) + __pyx_t_204)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4175:                     dLr[ii] = dl
          __pyx_t_205 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_205, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4176:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_206 = 0;
          __pyx_t_207 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_206 * __pyx_v_Ds.strides[0]) )) + __pyx_t_207)) )));
          __pyx_t_208 = 1;
          __pyx_t_209 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_208 * __pyx_v_Ds.strides[0]) )) + __pyx_t_209)) )));
          __pyx_t_210 = 2;
          __pyx_t_211 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_210 * __pyx_v_Ds.strides[0]) )) + __pyx_t_211)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4177:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_212 = 0;
          __pyx_t_213 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_212 * __pyx_v_us.strides[0]) )) + __pyx_t_213)) )));
          __pyx_t_214 = 1;
          __pyx_t_215 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_214 * __pyx_v_us.strides[0]) )) + __pyx_t_215)) )));
          __pyx_t_216 = 2;
          __pyx_t_217 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_216 * __pyx_v_us.strides[0]) )) + __pyx_t_217)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4178:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4178, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4178, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4178, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4178, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4179:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4179, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4179, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4179, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4179, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4180:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4181:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4182:                         kk[jj] = kkk
            __pyx_t_218 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_218, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4183:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_219 = 0;
            __pyx_t_220 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_219, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_220, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4184:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_221 = 1;
            __pyx_t_222 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_221, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_222, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4185:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_223 = 2;
            __pyx_t_224 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_223, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_224, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4186:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4186, __pyx_L1_error)
+4187:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4187, __pyx_L1_error)
        }
 4188: 
 4189:             else:
+4190:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4191:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4191, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_7, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4191, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4191, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4192:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4193:                     dl0 = DLs[0,ii]
          __pyx_t_225 = 0;
          __pyx_t_226 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_225 * __pyx_v_DLs.strides[0]) )) + __pyx_t_226)) )));
+4194:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_227 = 1;
          __pyx_t_228 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_227 * __pyx_v_DLs.strides[0]) )) + __pyx_t_228)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4195:                     dLr[ii] = dl
          __pyx_t_229 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_229, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4196:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_230 = 0;
          __pyx_t_231 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_230 * __pyx_v_Ds.strides[0]) )) + __pyx_t_231)) )));
          __pyx_t_232 = 1;
          __pyx_t_233 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_232 * __pyx_v_Ds.strides[0]) )) + __pyx_t_233)) )));
          __pyx_t_234 = 2;
          __pyx_t_235 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_234 * __pyx_v_Ds.strides[0]) )) + __pyx_t_235)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4197:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_236 = 0;
          __pyx_t_237 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_236 * __pyx_v_us.strides[0]) )) + __pyx_t_237)) )));
          __pyx_t_238 = 1;
          __pyx_t_239 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_238 * __pyx_v_us.strides[0]) )) + __pyx_t_239)) )));
          __pyx_t_240 = 2;
          __pyx_t_241 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_240 * __pyx_v_us.strides[0]) )) + __pyx_t_241)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4198:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4198, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4198, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4198, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4198, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4199:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4199, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4199, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4199, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4199, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4200:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4201:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4202:                         kk[jj] = kkk
            __pyx_t_242 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_242, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4203:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_243 = 0;
            __pyx_t_244 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_243, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_244, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4204:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_245 = 1;
            __pyx_t_246 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_245, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_246, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4205:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_247 = 2;
            __pyx_t_248 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_247, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_248, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4206:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4206, __pyx_L1_error)
+4207:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4207, __pyx_L1_error)
        }
      }
      __pyx_L49:;
 4208: 
 4209:         else:
+4210:             if method=='sum':
    /*else*/ {
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4210, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L62;
      }
+4211:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4212:                     dl0 = DLs[0,ii]
          __pyx_t_249 = 0;
          __pyx_t_250 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_249 * __pyx_v_DLs.strides[0]) )) + __pyx_t_250)) )));
 4213:                     # Compute the number of intervals to satisfy the resolution
+4214:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_251 = 1;
          __pyx_t_252 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_251 * __pyx_v_DLs.strides[0]) )) + __pyx_t_252)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4214, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4214, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4214, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4214, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4215:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_253 = 1;
          __pyx_t_254 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_253 * __pyx_v_DLs.strides[0]) )) + __pyx_t_254)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4216:                     dLr[ii] = dl
          __pyx_t_255 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_255, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4217:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_256 = 0;
          __pyx_t_257 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_256 * __pyx_v_Ds.strides[0]) )) + __pyx_t_257)) )));
          __pyx_t_258 = 1;
          __pyx_t_259 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_258 * __pyx_v_Ds.strides[0]) )) + __pyx_t_259)) )));
          __pyx_t_260 = 2;
          __pyx_t_261 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_260 * __pyx_v_Ds.strides[0]) )) + __pyx_t_261)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4218:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_262 = 0;
          __pyx_t_263 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_262 * __pyx_v_us.strides[0]) )) + __pyx_t_263)) )));
          __pyx_t_264 = 1;
          __pyx_t_265 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_264 * __pyx_v_us.strides[0]) )) + __pyx_t_265)) )));
          __pyx_t_266 = 2;
          __pyx_t_267 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_266 * __pyx_v_us.strides[0]) )) + __pyx_t_267)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4219:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4219, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4219, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4219, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4219, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4220:                     kk = np.empty((N,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4220, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4220, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4220, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4220, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4221:                     for jj in range(0,N):
          __pyx_t_39 = __pyx_v_N;
          __pyx_t_40 = __pyx_t_39;
          for (__pyx_t_41 = 0; __pyx_t_41 < __pyx_t_40; __pyx_t_41+=1) {
            __pyx_v_jj = __pyx_t_41;
+4222:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4223:                         kk[jj] = kkk
            __pyx_t_268 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_268, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4224:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_269 = 0;
            __pyx_t_270 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_269, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_270, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4225:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_271 = 1;
            __pyx_t_272 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_271, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_272, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4226:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_273 = 2;
            __pyx_t_274 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_273, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_274, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4227:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4227, __pyx_L1_error)
+4228:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4228, __pyx_L1_error)
        }
 4229: 
+4230:             elif method=='simps':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4230, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L62;
      }
+4231:                 for ii in range(0,ND):
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4232:                     dl0 = DLs[0,ii]
          __pyx_t_275 = 0;
          __pyx_t_276 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_275 * __pyx_v_DLs.strides[0]) )) + __pyx_t_276)) )));
 4233:                     # Compute the number of intervals to satisfy the resolution
+4234:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_277 = 1;
          __pyx_t_278 = __pyx_v_ii;
          __pyx_t_6 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_277 * __pyx_v_DLs.strides[0]) )) + __pyx_t_278)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4234, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4234, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4234, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4234, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4235:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_49 = __pyx_v_N;
          } else {
            __pyx_t_49 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_49;
+4236:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_279 = 1;
          __pyx_t_280 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_279 * __pyx_v_DLs.strides[0]) )) + __pyx_t_280)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4237:                     dLr[ii] = dl
          __pyx_t_281 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_281, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4238:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_282 = 0;
          __pyx_t_283 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_282 * __pyx_v_Ds.strides[0]) )) + __pyx_t_283)) )));
          __pyx_t_284 = 1;
          __pyx_t_285 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_284 * __pyx_v_Ds.strides[0]) )) + __pyx_t_285)) )));
          __pyx_t_286 = 2;
          __pyx_t_287 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_286 * __pyx_v_Ds.strides[0]) )) + __pyx_t_287)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4239:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_288 = 0;
          __pyx_t_289 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_288 * __pyx_v_us.strides[0]) )) + __pyx_t_289)) )));
          __pyx_t_290 = 1;
          __pyx_t_291 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_290 * __pyx_v_us.strides[0]) )) + __pyx_t_291)) )));
          __pyx_t_292 = 2;
          __pyx_t_293 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_292 * __pyx_v_us.strides[0]) )) + __pyx_t_293)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4240:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4240, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4240, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4240, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4240, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4241:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4241, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4241, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4241, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4241, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4242:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4243:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4244:                         kk[jj] = kkk
            __pyx_t_294 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_294, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4245:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_295 = 0;
            __pyx_t_296 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_295, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_296, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4246:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_297 = 1;
            __pyx_t_298 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_297, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_298, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4247:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_299 = 2;
            __pyx_t_300 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_299, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_300, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4248:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4248, __pyx_L1_error)
+4249:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4249, __pyx_L1_error)
        }
 4250: 
 4251:             else:
+4252:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_10 = __pyx_v_ND;
        __pyx_t_11 = __pyx_t_10;
        for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
          __pyx_v_ii = __pyx_t_12;
+4253:                     dl0 = DLs[0,ii]
          __pyx_t_301 = 0;
          __pyx_t_302 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_301 * __pyx_v_DLs.strides[0]) )) + __pyx_t_302)) )));
 4254:                     # Compute the number of intervals to satisfy the resolution
+4255:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_303 = 1;
          __pyx_t_304 = __pyx_v_ii;
          __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_303 * __pyx_v_DLs.strides[0]) )) + __pyx_t_304)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4255, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4255, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_13));
+4256:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4257:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_305 = 1;
          __pyx_t_306 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_305 * __pyx_v_DLs.strides[0]) )) + __pyx_t_306)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4258:                     dLr[ii] = dl
          __pyx_t_307 = __pyx_v_ii;
          *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_dLr.rcbuffer->pybuffer.buf, __pyx_t_307, __pyx_pybuffernd_dLr.diminfo[0].strides) = __pyx_v_dl;
+4259:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_308 = 0;
          __pyx_t_309 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_308 * __pyx_v_Ds.strides[0]) )) + __pyx_t_309)) )));
          __pyx_t_310 = 1;
          __pyx_t_311 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_310 * __pyx_v_Ds.strides[0]) )) + __pyx_t_311)) )));
          __pyx_t_312 = 2;
          __pyx_t_313 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_312 * __pyx_v_Ds.strides[0]) )) + __pyx_t_313)) )));
          __pyx_v_D0 = __pyx_t_13;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4260:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_314 = 0;
          __pyx_t_315 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_314 * __pyx_v_us.strides[0]) )) + __pyx_t_315)) )));
          __pyx_t_316 = 1;
          __pyx_t_317 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_316 * __pyx_v_us.strides[0]) )) + __pyx_t_317)) )));
          __pyx_t_318 = 2;
          __pyx_t_319 = __pyx_v_ii;
          __pyx_t_13 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_318 * __pyx_v_us.strides[0]) )) + __pyx_t_319)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_13;
+4261:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4261, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4261, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4261, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4261, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4262:                     kk = np.empty((N+1,),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4262, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4262, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4262, __pyx_L1_error)
          __pyx_t_38 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kk.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_t_38, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kk.rcbuffer->pybuffer, (PyObject*)__pyx_v_kk, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_kk.diminfo[0].strides = __pyx_pybuffernd_kk.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kk.diminfo[0].shape = __pyx_pybuffernd_kk.rcbuffer->pybuffer.shape[0];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4262, __pyx_L1_error)
          }
          __pyx_t_38 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kk, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4263:                     for jj in range(0,N+1):
          __pyx_t_49 = (__pyx_v_N + 1);
          __pyx_t_67 = __pyx_t_49;
          for (__pyx_t_39 = 0; __pyx_t_39 < __pyx_t_67; __pyx_t_39+=1) {
            __pyx_v_jj = __pyx_t_39;
+4264:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4265:                         kk[jj] = kkk
            __pyx_t_320 = __pyx_v_jj;
            *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kk.rcbuffer->pybuffer.buf, __pyx_t_320, __pyx_pybuffernd_kk.diminfo[0].strides) = __pyx_v_kkk;
+4266:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_321 = 0;
            __pyx_t_322 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_321, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_322, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4267:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_323 = 1;
            __pyx_t_324 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_323, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_324, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4268:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_325 = 2;
            __pyx_t_326 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_325, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_326, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4269:                     Pts[ii] = pts
          if (unlikely(__Pyx_SetItemInt(__pyx_v_Pts, __pyx_v_ii, ((PyObject *)__pyx_v_pts), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4269, __pyx_L1_error)
+4270:                     k[ii] = kk
          if (unlikely(__Pyx_SetItemInt(__pyx_v_k, __pyx_v_ii, ((PyObject *)__pyx_v_kk), unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 1, 0, 0) < 0)) __PYX_ERR(0, 4270, __pyx_L1_error)
        }
      }
      __pyx_L62:;
    }
    __pyx_L48:;
  }
  __pyx_L20:;
 4271: 
+4272:     return Pts, k, dLr
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_Pts);
  __Pyx_GIVEREF(__pyx_v_Pts);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_Pts);
  __Pyx_INCREF(__pyx_v_k);
  __Pyx_GIVEREF(__pyx_v_k);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_k);
  __Pyx_INCREF(((PyObject *)__pyx_v_dLr));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_dLr));
  PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_v_dLr));
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4273: 
 4274: 
 4275: 
 4276: 
 4277: 
 4278: 
 4279: ######################################################################
 4280: #               Signal calculation
 4281: ######################################################################
 4282: 
 4283: 
+4284: cdef get_insp(ff):
static PyObject *__pyx_f_4tofu_4geom_5_GG03_get_insp(PyObject *__pyx_v_ff) {
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_pars = NULL;
  PyObject *__pyx_v_na = NULL;
  PyObject *__pyx_v_kw = NULL;
  PyObject *__pyx_v_nat = NULL;
  PyObject *__pyx_v_nak = NULL;
  PyObject *__pyx_v_pp = NULL;
  PyObject *__pyx_v_ii = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_insp", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("tofu.geom._GG03.get_insp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_pars);
  __Pyx_XDECREF(__pyx_v_na);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_nat);
  __Pyx_XDECREF(__pyx_v_nak);
  __Pyx_XDECREF(__pyx_v_pp);
  __Pyx_XDECREF(__pyx_v_ii);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4285:     out = insp(ff)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_insp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_ff) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_ff);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4285, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_out = __pyx_t_1;
  __pyx_t_1 = 0;
+4286:     if sys.version[0]=='3':
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_sys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_version); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s_3, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+4287:         pars = out.parameters.values()
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_parameters); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_values); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_pars = __pyx_t_1;
    __pyx_t_1 = 0;
+4288:         na = np.sum([(pp.kind==pp.POSITIONAL_OR_KEYWORD
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
/* … */
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_kind); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_POSITIONAL_OR_KEYWORD); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4288, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = PyObject_RichCompare(__pyx_t_9, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4288, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 4288, __pyx_L1_error)
      if (__pyx_t_4) {
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      } else {
        __Pyx_INCREF(__pyx_t_11);
        __pyx_t_8 = __pyx_t_11;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L6_bool_binop_done;
      }
+4289:                       and pp.default is pp.empty) for pp in pars])
    if (likely(PyList_CheckExact(__pyx_v_pars)) || PyTuple_CheckExact(__pyx_v_pars)) {
      __pyx_t_5 = __pyx_v_pars; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_pars); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4289, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_5))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4289, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4289, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4289, __pyx_L1_error)
          #else
          __pyx_t_8 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4289, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          #endif
        }
      } else {
        __pyx_t_8 = __pyx_t_7(__pyx_t_5);
        if (unlikely(!__pyx_t_8)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4289, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_8);
      __pyx_t_8 = 0;
/* … */
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_default); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_empty); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_4 = (__pyx_t_11 == __pyx_t_10);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4289, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_8 = __pyx_t_10;
      __pyx_t_10 = 0;
      __pyx_L6_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_8))) __PYX_ERR(0, 4288, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_na = __pyx_t_1;
    __pyx_t_1 = 0;
+4290:         kw = [pp.name for pp in pars if (pp.kind==pp.POSITIONAL_OR_KEYWORD
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (likely(PyList_CheckExact(__pyx_v_pars)) || PyTuple_CheckExact(__pyx_v_pars)) {
      __pyx_t_2 = __pyx_v_pars; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_pars); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_7 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4290, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4290, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4290, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4290, __pyx_L1_error)
          #else
          __pyx_t_3 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4290, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          #endif
        }
      } else {
        __pyx_t_3 = __pyx_t_7(__pyx_t_2);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4290, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_3);
      }
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_3);
      __pyx_t_3 = 0;
/* … */
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_kind); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
/* … */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_POSITIONAL_OR_KEYWORD); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4290, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8 = PyObject_RichCompare(__pyx_t_3, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4290, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4290, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (__pyx_t_12) {
      } else {
        __pyx_t_4 = __pyx_t_12;
        goto __pyx_L11_bool_binop_done;
      }
/* … */
      if (__pyx_t_4) {
        __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4290, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 4290, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_kw = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
+4291:                                          and pp.default is not pp.empty)]
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_default); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pp, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_12 = (__pyx_t_8 != __pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_13 = (__pyx_t_12 != 0);
      __pyx_t_4 = __pyx_t_13;
      __pyx_L11_bool_binop_done:;
 4292:     else:
+4293:         nat, nak = len(out.args), len(out.defaults)
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_defaults); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4293, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_nat = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_v_nak = __pyx_t_2;
    __pyx_t_2 = 0;
+4294:         na = nat-nak
    __pyx_t_2 = PyNumber_Subtract(__pyx_v_nat, __pyx_v_nak); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_na = __pyx_t_2;
    __pyx_t_2 = 0;
+4295:         kw = [out.args[ii] for ii in range(nat-1,na-1,-1)][::-1]
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_v_nat, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyInt_SubtractObjC(__pyx_v_na, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
    __Pyx_INCREF(__pyx_int_neg_1);
    __Pyx_GIVEREF(__pyx_int_neg_1);
    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_int_neg_1);
    __pyx_t_1 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (likely(PyList_CheckExact(__pyx_t_5)) || PyTuple_CheckExact(__pyx_t_5)) {
      __pyx_t_8 = __pyx_t_5; __Pyx_INCREF(__pyx_t_8); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
    } else {
      __pyx_t_6 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4295, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    for (;;) {
      if (likely(!__pyx_t_7)) {
        if (likely(PyList_CheckExact(__pyx_t_8))) {
          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4295, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4295, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 4295, __pyx_L1_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4295, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_7(__pyx_t_8);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 4295, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_ii, __pyx_t_5);
      __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_ii); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 4295, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_slice__21); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_kw = ((PyObject*)__pyx_t_8);
    __pyx_t_8 = 0;
  }
  __pyx_L3:;
+4296:     return na, kw
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_na);
  __Pyx_GIVEREF(__pyx_v_na);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_na);
  __Pyx_INCREF(__pyx_v_kw);
  __Pyx_GIVEREF(__pyx_v_kw);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_kw);
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 4297: 
 4298: 
 4299: 
+4300: def check_ff(ff, t=None, Ani=None, bool Vuniq=False):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_53check_ff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_53check_ff = {"check_ff", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_53check_ff, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_53check_ff(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ff = 0;
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_Ani = 0;
  PyBoolObject *__pyx_v_Vuniq = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_ff (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ff,&__pyx_n_s_t,&__pyx_n_s_Ani,&__pyx_n_s_Vuniq,0};
    PyObject* values[4] = {0,0,0,0};
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)Py_None);
    values[3] = (PyObject *)((PyBoolObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ff)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ani);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Vuniq);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "check_ff") < 0)) __PYX_ERR(0, 4300, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ff = values[0];
    __pyx_v_t = values[1];
    __pyx_v_Ani = values[2];
    __pyx_v_Vuniq = ((PyBoolObject *)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("check_ff", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4300, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.check_ff", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Vuniq), __pyx_ptype_7cpython_4bool_bool, 1, "Vuniq", 0))) __PYX_ERR(0, 4300, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_52check_ff(__pyx_self, __pyx_v_ff, __pyx_v_t, __pyx_v_Ani, __pyx_v_Vuniq);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_52check_ff(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ff, PyObject *__pyx_v_t, PyObject *__pyx_v_Ani, PyBoolObject *__pyx_v_Vuniq) {
  PyBoolObject *__pyx_v_ani = 0;
  PyObject *__pyx_v_stre = NULL;
  PyObject *__pyx_v_na = NULL;
  PyObject *__pyx_v_kw = NULL;
  int __pyx_v_C;
  PyObject *__pyx_v_Pts = NULL;
  PyObject *__pyx_v_NP = NULL;
  PyObject *__pyx_v_out = NULL;
  PyObject *__pyx_v_Str = NULL;
  Py_ssize_t __pyx_v_nt;
  PyObject *__pyx_v_Vect = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_ff", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("tofu.geom._GG03.check_ff", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_ani);
  __Pyx_XDECREF(__pyx_v_stre);
  __Pyx_XDECREF(__pyx_v_na);
  __Pyx_XDECREF(__pyx_v_kw);
  __Pyx_XDECREF(__pyx_v_Pts);
  __Pyx_XDECREF(__pyx_v_NP);
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF(__pyx_v_Str);
  __Pyx_XDECREF(__pyx_v_Vect);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__210 = PyTuple_Pack(15, __pyx_n_s_ff, __pyx_n_s_t, __pyx_n_s_Ani, __pyx_n_s_Vuniq, __pyx_n_s_ani, __pyx_n_s_stre, __pyx_n_s_na, __pyx_n_s_kw, __pyx_n_s_C, __pyx_n_s_Pts, __pyx_n_s_NP, __pyx_n_s_out, __pyx_n_s_Str, __pyx_n_s_nt, __pyx_n_s_Vect); if (unlikely(!__pyx_tuple__210)) __PYX_ERR(0, 4300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__210);
  __Pyx_GIVEREF(__pyx_tuple__210);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_53check_ff, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_check_ff, __pyx_t_1) < 0) __PYX_ERR(0, 4300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__211 = (PyObject*)__Pyx_PyCode_New(4, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__210, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_check_ff, 4300, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__211)) __PYX_ERR(0, 4300, __pyx_L1_error)
 4301:     cdef bool ani
+4302:     stre = "Input emissivity function (ff)"
  __Pyx_INCREF(__pyx_kp_s_Input_emissivity_function_ff);
  __pyx_v_stre = __pyx_kp_s_Input_emissivity_function_ff;
+4303:     assert hasattr(ff,'__call__'), stre+" must be a callable (function)!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = __Pyx_HasAttr(__pyx_v_ff, __pyx_n_s_call); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4303, __pyx_L1_error)
    if (unlikely(!(__pyx_t_1 != 0))) {
      __pyx_t_2 = PyNumber_Add(__pyx_v_stre, __pyx_kp_s_must_be_a_callable_function); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4303, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 4303, __pyx_L1_error)
    }
  }
  #endif
+4304:     na, kw = get_insp(ff)
  __pyx_t_3 = __pyx_f_4tofu_4geom_5_GG03_get_insp(__pyx_v_ff); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 4304, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4304, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 4304, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 4304, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_na = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_kw = __pyx_t_4;
  __pyx_t_4 = 0;
+4305:     assert na==1, stre+" must take only one positional argument: ff(Pts)!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_na, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4305, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) {
      __pyx_t_3 = PyNumber_Add(__pyx_v_stre, __pyx_kp_s_must_take_only_one_positional_a); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = PyTuple_Pack(1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 4305, __pyx_L1_error)
    }
  }
  #endif
+4306:     assert 't' in kw, stre+" must have kwarg 't=None' for time vector!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_t, __pyx_v_kw, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4306, __pyx_L1_error)
    if (unlikely(!(__pyx_t_1 != 0))) {
      __pyx_t_4 = PyNumber_Add(__pyx_v_stre, __pyx_kp_s_must_have_kwarg_t_None_for_time); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = PyTuple_Pack(1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4306, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 4306, __pyx_L1_error)
    }
  }
  #endif
+4307:     C = type(t) in [int,float,np.int64,np.float64] or hasattr(t,'__iter__')
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_t)));
  __pyx_t_3 = ((PyObject *)Py_TYPE(__pyx_v_t));
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_t_3), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_t_3), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L7_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_int64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_t_3), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_8) {
  } else {
    __pyx_t_7 = __pyx_t_8;
    goto __pyx_L7_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(((PyObject *)__pyx_t_3), __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7 = __pyx_t_8;
  __pyx_L7_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_8 = (__pyx_t_7 != 0);
  if (!__pyx_t_8) {
  } else {
    __pyx_t_1 = __pyx_t_8;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_8 = __Pyx_HasAttr(__pyx_v_t, __pyx_n_s_iter); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 4307, __pyx_L1_error)
  __pyx_t_7 = (__pyx_t_8 != 0);
  __pyx_t_1 = __pyx_t_7;
  __pyx_L5_bool_binop_done:;
  __pyx_v_C = __pyx_t_1;
+4308:     assert t is None or C, "Arg t must be None, a scalar or an iterable!"
  #ifndef CYTHON_WITHOUT_ASSERTIONS
  if (unlikely(!Py_OptimizeFlag)) {
    __pyx_t_7 = (__pyx_v_t == Py_None);
    __pyx_t_8 = (__pyx_t_7 != 0);
    if (!__pyx_t_8) {
    } else {
      __pyx_t_1 = __pyx_t_8;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_8 = (__pyx_v_C != 0);
    __pyx_t_1 = __pyx_t_8;
    __pyx_L11_bool_binop_done:;
    if (unlikely(!__pyx_t_1)) {
      PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_t_must_be_None_a_scalar_or_a);
      __PYX_ERR(0, 4308, __pyx_L1_error)
    }
  }
  #endif
+4309:     Pts = np.array([[1,2],[3,4],[5,6]])
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyList_SET_ITEM(__pyx_t_4, 0, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_2);
  __Pyx_GIVEREF(__pyx_int_2);
  PyList_SET_ITEM(__pyx_t_4, 1, __pyx_int_2);
  __pyx_t_5 = PyList_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyList_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_INCREF(__pyx_int_4);
  __Pyx_GIVEREF(__pyx_int_4);
  PyList_SET_ITEM(__pyx_t_5, 1, __pyx_int_4);
  __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_int_5);
  __Pyx_GIVEREF(__pyx_int_5);
  PyList_SET_ITEM(__pyx_t_9, 0, __pyx_int_5);
  __Pyx_INCREF(__pyx_int_6);
  __Pyx_GIVEREF(__pyx_int_6);
  PyList_SET_ITEM(__pyx_t_9, 1, __pyx_int_6);
  __pyx_t_10 = PyList_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_10, 2, __pyx_t_9);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_Pts = __pyx_t_3;
  __pyx_t_3 = 0;
+4310:     NP = Pts.shape[1]
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_NP = __pyx_t_2;
  __pyx_t_2 = 0;
+4311:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    goto __pyx_L18_try_end;
    __pyx_L13_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
    goto __pyx_L1_error;
    __pyx_L14_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_11);
    __Pyx_XGIVEREF(__pyx_t_12);
    __Pyx_XGIVEREF(__pyx_t_13);
    __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
    __pyx_L18_try_end:;
  }
+4312:         out = ff(Pts, t=t)
      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4312, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_v_Pts);
      __Pyx_GIVEREF(__pyx_v_Pts);
      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_Pts);
      __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4312, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4312, __pyx_L13_error)
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4312, __pyx_L13_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_out = __pyx_t_10;
      __pyx_t_10 = 0;
+4313:     except Exception:
    __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
    if (__pyx_t_14) {
      __Pyx_AddTraceback("tofu.geom._GG03.check_ff", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_3, &__pyx_t_2) < 0) __PYX_ERR(0, 4313, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_2);
+4314:         Str = stre+" must take one positional arg: a (3,N) np.ndarray"
      __pyx_t_9 = PyNumber_Add(__pyx_v_stre, __pyx_kp_s_must_take_one_positional_arg_a); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4314, __pyx_L15_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_v_Str = __pyx_t_9;
      __pyx_t_9 = 0;
+4315:         assert False, Str
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(!0)) {
          __pyx_t_9 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4315, __pyx_L15_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_9);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __PYX_ERR(0, 4315, __pyx_L15_except_error)
        }
      }
      #endif
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L14_exception_handled;
    }
    goto __pyx_L15_except_error;
    __pyx_L15_except_error:;
+4316:     if hasattr(t,'__iter__'):
  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_t, __pyx_n_s_iter); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4316, __pyx_L1_error)
  __pyx_t_8 = (__pyx_t_1 != 0);
  if (__pyx_t_8) {
/* … */
    goto __pyx_L21;
  }
+4317:         nt = len(t)
    __pyx_t_15 = PyObject_Length(__pyx_v_t); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4317, __pyx_L1_error)
    __pyx_v_nt = __pyx_t_15;
 4318:         Str = ("ff(Pts,t=t), where Pts is a (3,N) np.array and "
+4319:                +"t a len()=nt iterable, must return a (nt,N) np.ndarray!")
    __pyx_t_2 = PyNumber_Add(__pyx_kp_s_ff_Pts_t_t_where_Pts_is_a_3_N_np, __pyx_kp_s_t_a_len_nt_iterable_must_return); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4319, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_XDECREF_SET(__pyx_v_Str, __pyx_t_2);
    __pyx_t_2 = 0;
+4320:         assert type(out) is np.ndarray and out.shape==(nt,NP), Str
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4320, __pyx_L1_error) }
      __pyx_t_1 = (((PyObject *)Py_TYPE(__pyx_v_out)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_7 = (__pyx_t_1 != 0);
      if (__pyx_t_7) {
      } else {
        __pyx_t_8 = __pyx_t_7;
        goto __pyx_L22_bool_binop_done;
      }
      if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4320, __pyx_L1_error) }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_nt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_3);
      __Pyx_INCREF(__pyx_v_NP);
      __Pyx_GIVEREF(__pyx_v_NP);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_NP);
      __pyx_t_3 = 0;
      __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4320, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = __pyx_t_7;
      __pyx_L22_bool_binop_done:;
      if (unlikely(!__pyx_t_8)) {
        __pyx_t_3 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4320, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_3);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __PYX_ERR(0, 4320, __pyx_L1_error)
      }
    }
    #endif
 4321:     else:
+4322:         Str = ("When fed a (3,N) np.array only, or if t is a scalar,"
  /*else*/ {
+4323:                +" ff must return a (N,) np.ndarray!")
    __pyx_t_3 = PyNumber_Add(__pyx_kp_s_When_fed_a_3_N_np_array_only_or, __pyx_kp_s_ff_must_return_a_N_np_ndarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4323, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_Str, __pyx_t_3);
    __pyx_t_3 = 0;
+4324:         assert type(out) is np.ndarray and out.shape==(NP,), Str
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4324, __pyx_L1_error) }
      __pyx_t_7 = (((PyObject *)Py_TYPE(__pyx_v_out)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_1 = (__pyx_t_7 != 0);
      if (__pyx_t_1) {
      } else {
        __pyx_t_8 = __pyx_t_1;
        goto __pyx_L24_bool_binop_done;
      }
      if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4324, __pyx_L1_error) }
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = PyTuple_New(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4324, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_INCREF(__pyx_v_NP);
      __Pyx_GIVEREF(__pyx_v_NP);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_NP);
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4324, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4324, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_8 = __pyx_t_1;
      __pyx_L24_bool_binop_done:;
      if (unlikely(!__pyx_t_8)) {
        __pyx_t_2 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4324, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 4324, __pyx_L1_error)
      }
    }
    #endif
  }
  __pyx_L21:;
 4325: 
+4326:     ani = ('Vect' in kw) if Ani is None else Ani
  __pyx_t_8 = (__pyx_v_Ani == Py_None);
  if ((__pyx_t_8 != 0)) {
    __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_Vect, __pyx_v_kw, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4326, __pyx_L1_error)
    __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4326, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (!(likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_7cpython_4bool_bool)))) __PYX_ERR(0, 4326, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_10;
    __pyx_t_10 = 0;
  } else {
    if (!(likely(((__pyx_v_Ani) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_Ani, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 4326, __pyx_L1_error)
    __Pyx_INCREF(__pyx_v_Ani);
    __pyx_t_2 = __pyx_v_Ani;
  }
  __pyx_v_ani = ((PyBoolObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+4327:     if ani:
  __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4327, __pyx_L1_error)
  if (__pyx_t_8) {
/* … */
  }
+4328:         Str = "If Ani=True, ff must take a keyword argument 'Vect=None'!"
    __Pyx_INCREF(__pyx_kp_s_If_Ani_True_ff_must_take_a_keywo);
    __Pyx_DECREF_SET(__pyx_v_Str, __pyx_kp_s_If_Ani_True_ff_must_take_a_keywo);
+4329:         assert 'Vect' in kw, Str
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_n_s_Vect, __pyx_v_kw, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4329, __pyx_L1_error)
      if (unlikely(!(__pyx_t_8 != 0))) {
        __pyx_t_2 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4329, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 4329, __pyx_L1_error)
      }
    }
    #endif
+4330:         Vect = np.array([1,2,3]) if Vuniq else np.ones(Pts.shape)
    __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_Vuniq)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4330, __pyx_L1_error)
    if (__pyx_t_8) {
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyList_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_GIVEREF(__pyx_int_1);
      PyList_SET_ITEM(__pyx_t_3, 0, __pyx_int_1);
      __Pyx_INCREF(__pyx_int_2);
      __Pyx_GIVEREF(__pyx_int_2);
      PyList_SET_ITEM(__pyx_t_3, 1, __pyx_int_2);
      __Pyx_INCREF(__pyx_int_3);
      __Pyx_GIVEREF(__pyx_int_3);
      PyList_SET_ITEM(__pyx_t_3, 2, __pyx_int_3);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_9, function);
        }
      }
      __pyx_t_10 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_3);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_2 = __pyx_t_10;
      __pyx_t_10 = 0;
    } else {
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_np); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_Pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_5)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_10 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_9) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9);
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_2 = __pyx_t_10;
      __pyx_t_10 = 0;
    }
    __pyx_v_Vect = __pyx_t_2;
    __pyx_t_2 = 0;
+4331:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L32_try_end;
      __pyx_L27_error:;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      goto __pyx_L1_error;
      __pyx_L28_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      __pyx_L32_try_end:;
    }
+4332:             out = ff(Pts, Vect=Vect, t=t)
        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4332, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_v_Pts);
        __Pyx_GIVEREF(__pyx_v_Pts);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_Pts);
        __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4332, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_Vect, __pyx_v_Vect) < 0) __PYX_ERR(0, 4332, __pyx_L27_error)
        if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4332, __pyx_L27_error)
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_2, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4332, __pyx_L27_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF_SET(__pyx_v_out, __pyx_t_3);
        __pyx_t_3 = 0;
+4333:         except Exception:
      __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
      if (__pyx_t_14) {
        __Pyx_AddTraceback("tofu.geom._GG03.check_ff", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_10, &__pyx_t_2) < 0) __PYX_ERR(0, 4333, __pyx_L29_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_t_2);
+4334:             Str = "If Ani=True, ff must handle multiple points Pts (3,N) with "
        __Pyx_INCREF(__pyx_kp_s_If_Ani_True_ff_must_handle_multi);
        __Pyx_DECREF_SET(__pyx_v_Str, __pyx_kp_s_If_Ani_True_ff_must_handle_multi);
+4335:             if Vuniq:
        __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_Vuniq)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4335, __pyx_L29_except_error)
        if (__pyx_t_8) {
/* … */
          goto __pyx_L35;
        }
+4336:                 Str += "a unique common vector (Vect as a len()=3 iterable)"
          __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_Str, __pyx_kp_s_a_unique_common_vector_Vect_as_a); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4336, __pyx_L29_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF_SET(__pyx_v_Str, __pyx_t_9);
          __pyx_t_9 = 0;
 4337:             else:
+4338:                 Str += "multiple vectors (Vect as a (3,N) np.ndarray)"
        /*else*/ {
          __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_Str, __pyx_kp_s_multiple_vectors_Vect_as_a_3_N_n); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4338, __pyx_L29_except_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF_SET(__pyx_v_Str, __pyx_t_9);
          __pyx_t_9 = 0;
        }
        __pyx_L35:;
+4339:             assert False, Str
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(!Py_OptimizeFlag)) {
          if (unlikely(!0)) {
            __pyx_t_9 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4339, __pyx_L29_except_error)
            __Pyx_GOTREF(__pyx_t_9);
            PyErr_SetObject(PyExc_AssertionError, __pyx_t_9);
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            __PYX_ERR(0, 4339, __pyx_L29_except_error)
          }
        }
        #endif
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        goto __pyx_L28_exception_handled;
      }
      goto __pyx_L29_except_error;
      __pyx_L29_except_error:;
+4340:         if hasattr(t,'__iter__'):
    __pyx_t_8 = __Pyx_HasAttr(__pyx_v_t, __pyx_n_s_iter); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 4340, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_8 != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L36;
    }
 4341:             Str = ("If Ani=True, ff must return a (nt,N) np.ndarray when "
+4342:                    +"Pts is (3,N), Vect is provided and t is (nt,)")
      __pyx_t_2 = PyNumber_Add(__pyx_kp_s_If_Ani_True_ff_must_return_a_nt, __pyx_kp_s_Pts_is_3_N_Vect_is_provided_and); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4342, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_Str, __pyx_t_2);
      __pyx_t_2 = 0;
+4343:             assert type(out) is np.ndarray and out.shape==(nt,NP), Str
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4343, __pyx_L1_error) }
        __pyx_t_8 = (((PyObject *)Py_TYPE(__pyx_v_out)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
        __pyx_t_7 = (__pyx_t_8 != 0);
        if (__pyx_t_7) {
        } else {
          __pyx_t_1 = __pyx_t_7;
          goto __pyx_L37_bool_binop_done;
        }
        if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4343, __pyx_L1_error) }
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4343, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = PyInt_FromSsize_t(__pyx_v_nt); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4343, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4343, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10);
        __Pyx_INCREF(__pyx_v_NP);
        __Pyx_GIVEREF(__pyx_v_NP);
        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_NP);
        __pyx_t_10 = 0;
        __pyx_t_10 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4343, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 4343, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_1 = __pyx_t_7;
        __pyx_L37_bool_binop_done:;
        if (unlikely(!__pyx_t_1)) {
          __pyx_t_10 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4343, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_10);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __PYX_ERR(0, 4343, __pyx_L1_error)
        }
      }
      #endif
 4344:         else:
+4345:             Str = ("If Ani=True, ff must return a (nt,N) np.ndarray when "
    /*else*/ {
+4346:                    +"Pts is (3,N), Vect is provided and t is (nt,)")
      __pyx_t_10 = PyNumber_Add(__pyx_kp_s_If_Ani_True_ff_must_return_a_nt, __pyx_kp_s_Pts_is_3_N_Vect_is_provided_and); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF_SET(__pyx_v_Str, __pyx_t_10);
      __pyx_t_10 = 0;
+4347:             assert type(out) is np.ndarray and out.shape==(NP,), Str
      #ifndef CYTHON_WITHOUT_ASSERTIONS
      if (unlikely(!Py_OptimizeFlag)) {
        if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4347, __pyx_L1_error) }
        __pyx_t_7 = (((PyObject *)Py_TYPE(__pyx_v_out)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
        __pyx_t_8 = (__pyx_t_7 != 0);
        if (__pyx_t_8) {
        } else {
          __pyx_t_1 = __pyx_t_8;
          goto __pyx_L39_bool_binop_done;
        }
        if (unlikely(!__pyx_v_out)) { __Pyx_RaiseUnboundLocalError("out"); __PYX_ERR(0, 4347, __pyx_L1_error) }
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_out, __pyx_n_s_shape); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4347, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4347, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_v_NP);
        __Pyx_GIVEREF(__pyx_v_NP);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_NP);
        __pyx_t_2 = PyObject_RichCompare(__pyx_t_10, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4347, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 4347, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_1 = __pyx_t_8;
        __pyx_L39_bool_binop_done:;
        if (unlikely(!__pyx_t_1)) {
          __pyx_t_2 = PyTuple_Pack(1, __pyx_v_Str); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4347, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __PYX_ERR(0, 4347, __pyx_L1_error)
        }
      }
      #endif
    }
    __pyx_L36:;
+4348:     return ani
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_ani));
  __pyx_r = ((PyObject *)__pyx_v_ani);
  goto __pyx_L0;
 4349: 
 4350: 
 4351: 
+4352: def integrate1d(y, double dx, t=None, str method='sum'):
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_55integrate1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_54integrate1d[] = " Generic integration method ['sum','simps','romb']\n\n        Not used internally\n        Useful when the sampling points need to be interpolated via equilibrium\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_55integrate1d = {"integrate1d", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_55integrate1d, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_54integrate1d};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_55integrate1d(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_y = 0;
  double __pyx_v_dx;
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_method = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate1d (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_y,&__pyx_n_s_dx,&__pyx_n_s_t,&__pyx_n_s_method,0};
    PyObject* values[4] = {0,0,0,0};
    values[2] = ((PyObject *)Py_None);
    values[3] = ((PyObject*)__pyx_n_s_sum);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dx)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("integrate1d", 0, 2, 4, 1); __PYX_ERR(0, 4352, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "integrate1d") < 0)) __PYX_ERR(0, 4352, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_y = values[0];
    __pyx_v_dx = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_dx == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4352, __pyx_L3_error)
    __pyx_v_t = values[2];
    __pyx_v_method = ((PyObject*)values[3]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("integrate1d", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4352, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.integrate1d", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 4352, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_54integrate1d(__pyx_self, __pyx_v_y, __pyx_v_dx, __pyx_v_t, __pyx_v_method);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_54integrate1d(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_y, double __pyx_v_dx, PyObject *__pyx_v_t, PyObject *__pyx_v_method) {
  unsigned int __pyx_v_nt;
  unsigned int __pyx_v_axm;
  PyObject *__pyx_v_ind = NULL;
  PyArrayObject *__pyx_v_s = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_s;
  __Pyx_Buffer __pyx_pybuffer_s;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("integrate1d", 0);
  __Pyx_INCREF(__pyx_v_y);
  __pyx_pybuffer_s.pybuffer.buf = NULL;
  __pyx_pybuffer_s.refcount = 0;
  __pyx_pybuffernd_s.data = NULL;
  __pyx_pybuffernd_s.rcbuffer = &__pyx_pybuffer_s;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_s.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.integrate1d", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_s.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_ind);
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__212 = PyTuple_Pack(8, __pyx_n_s_y, __pyx_n_s_dx, __pyx_n_s_t, __pyx_n_s_method, __pyx_n_s_nt, __pyx_n_s_axm, __pyx_n_s_ind, __pyx_n_s_s); if (unlikely(!__pyx_tuple__212)) __PYX_ERR(0, 4352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__212);
  __Pyx_GIVEREF(__pyx_tuple__212);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_55integrate1d, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_integrate1d, __pyx_t_1) < 0) __PYX_ERR(0, 4352, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__213 = (PyObject*)__Pyx_PyCode_New(4, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__212, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_integrate1d, 4352, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__213)) __PYX_ERR(0, 4352, __pyx_L1_error)
 4353:     """ Generic integration method ['sum','simps','romb']
 4354: 
 4355:         Not used internally
 4356:         Useful when the sampling points need to be interpolated via equilibrium
 4357:     """
 4358:     cdef unsigned int nt, axm
+4359:     if t is None or not hasattr(t,'__iter__'):
  __pyx_t_2 = (__pyx_v_t == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_HasAttr(__pyx_v_t, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 4359, __pyx_L1_error)
  __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4360:         nt = 1
    __pyx_v_nt = 1;
+4361:         axm = 0
    __pyx_v_axm = 0;
 4362:     else:
+4363:         nt = len(t)
  /*else*/ {
    __pyx_t_4 = PyObject_Length(__pyx_v_t); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4363, __pyx_L1_error)
    __pyx_v_nt = __pyx_t_4;
+4364:         axm = 1
    __pyx_v_axm = 1;
  }
  __pyx_L3:;
+4365:     ind = np.isnan(y)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_isnan); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_v_y) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_y);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4365, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_v_ind = __pyx_t_5;
  __pyx_t_5 = 0;
+4366:     if np.any(ind):
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_any); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_7, __pyx_v_ind) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_ind);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4366, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_1) {
/* … */
  }
+4367:         y = y.copy()
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_y, __pyx_n_s_copy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_5 = (__pyx_t_7) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_5);
    __pyx_t_5 = 0;
+4368:         y[ind] = 0.
    if (unlikely(PyObject_SetItem(__pyx_v_y, __pyx_v_ind, __pyx_float_0_) < 0)) __PYX_ERR(0, 4368, __pyx_L1_error)
 4369: 
+4370:     cdef np.ndarray[double,ndim=1] s = np.empty((nt,),dtype=float)
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nt); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7);
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4370, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4370, __pyx_L1_error)
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_8);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_s = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_s.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4370, __pyx_L1_error)
    } else {__pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_9 = 0;
  __pyx_v_s = ((PyArrayObject *)__pyx_t_8);
  __pyx_t_8 = 0;
 4371: 
+4372:     if method=='sum':
  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4372, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L7;
  }
+4373:         s = np.sum(y, axis=axm)*dx
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sum); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_y);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_axis, __pyx_t_6) < 0) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4373, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4373, __pyx_L1_error)
    __pyx_t_9 = ((PyArrayObject *)__pyx_t_8);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_s.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_v_s, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        }
        __pyx_t_11 = __pyx_t_12 = __pyx_t_13 = 0;
      }
      __pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4373, __pyx_L1_error)
    }
    __pyx_t_9 = 0;
    __Pyx_DECREF_SET(__pyx_v_s, ((PyArrayObject *)__pyx_t_8));
    __pyx_t_8 = 0;
+4374:     elif method=='simps':
  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4374, __pyx_L1_error)
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L7;
  }
+4375:         s = scpintg.simps(y, x=None, dx=dx, axis=axm)
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_simps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_y);
    __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_x, Py_None) < 0) __PYX_ERR(0, 4375, __pyx_L1_error)
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dx, __pyx_t_7) < 0) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4375, __pyx_L1_error)
    __pyx_t_9 = ((PyArrayObject *)__pyx_t_7);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_s.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_v_s, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_11);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_13, __pyx_t_12, __pyx_t_11);
        }
        __pyx_t_13 = __pyx_t_12 = __pyx_t_11 = 0;
      }
      __pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4375, __pyx_L1_error)
    }
    __pyx_t_9 = 0;
    __Pyx_DECREF_SET(__pyx_v_s, ((PyArrayObject *)__pyx_t_7));
    __pyx_t_7 = 0;
+4376:     elif method=='romb':
  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_romb, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4376, __pyx_L1_error)
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (likely(__pyx_t_2)) {
/* … */
    goto __pyx_L7;
  }
+4377:         s = scpintg.romb(y, dx=dx, axis=axm, show=False)
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_romb); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_y);
    __pyx_t_8 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_dx, __pyx_t_5) < 0) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_t_5) < 0) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_show, Py_False) < 0) __PYX_ERR(0, 4377, __pyx_L1_error)
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4377, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4377, __pyx_L1_error)
    __pyx_t_9 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_s.rcbuffer->pybuffer);
      __pyx_t_10 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_10 < 0)) {
        PyErr_Fetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_s.rcbuffer->pybuffer, (PyObject*)__pyx_v_s, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_11); Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
        }
        __pyx_t_11 = __pyx_t_12 = __pyx_t_13 = 0;
      }
      __pyx_pybuffernd_s.diminfo[0].strides = __pyx_pybuffernd_s.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_s.diminfo[0].shape = __pyx_pybuffernd_s.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 4377, __pyx_L1_error)
    }
    __pyx_t_9 = 0;
    __Pyx_DECREF_SET(__pyx_v_s, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;
 4378:     else:
+4379:         raise Exception("Arg method must be in ['sum','simps','romb']")
  /*else*/ {
    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__85, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(0, 4379, __pyx_L1_error)
  }
  __pyx_L7:;
/* … */
  __pyx_tuple__85 = PyTuple_Pack(1, __pyx_kp_s_Arg_method_must_be_in_sum_simps); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(0, 4379, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__85);
  __Pyx_GIVEREF(__pyx_tuple__85);
+4380:     return s
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_s));
  __pyx_r = ((PyObject *)__pyx_v_s);
  goto __pyx_L0;
 4381: 
 4382: 
 4383: 
 4384: 
 4385: @cython.cdivision(True)
 4386: @cython.wraparound(False)
 4387: @cython.boundscheck(False)
 4388: @cython.initializedcheck(False)
 4389: @cython.profile(False)
 4390: @cython.linetrace(False)
 4391: @cython.binding(False)
+4392: def LOS_calc_signal(ff, double[:,::1] Ds, double[:,::1] us, dL,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_57LOS_calc_signal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_56LOS_calc_signal[] = " Return the sampled line, with the specified method\n\n    'linspace': return the N+1 edges, including the first and last point\n    'sum' :     return N segments centers\n    'simps':    return N+1 egdes, N even (for scipy.integrate.simps)\n    'romb' :    return N+1 edges, N+1 = 2**k+1 (for scipy.integrate.romb)\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_57LOS_calc_signal = {"LOS_calc_signal", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_57LOS_calc_signal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_56LOS_calc_signal};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_57LOS_calc_signal(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_ff = 0;
  __Pyx_memviewslice __pyx_v_Ds = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_us = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_dL = 0;
  __Pyx_memviewslice __pyx_v_DLs = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_t = 0;
  PyObject *__pyx_v_Ani = 0;
  PyObject *__pyx_v_fkwdargs = 0;
  PyObject *__pyx_v_dLMode = 0;
  PyObject *__pyx_v_method = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_calc_signal (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ff,&__pyx_n_s_Ds,&__pyx_n_s_us,&__pyx_n_s_dL,&__pyx_n_s_DLs,&__pyx_n_s_t,&__pyx_n_s_Ani,&__pyx_n_s_fkwdargs,&__pyx_n_s_dLMode,&__pyx_n_s_method,&__pyx_n_s_Test,0};
    PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_56LOS_calc_signal(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_ff, __Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, PyObject *__pyx_v_dL, __Pyx_memviewslice __pyx_v_DLs, PyObject *__pyx_v_t, PyObject *__pyx_v_Ani, PyObject *__pyx_v_fkwdargs, PyObject *__pyx_v_dLMode, PyObject *__pyx_v_method, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_C0 = NULL;
  PyObject *__pyx_v_C1 = NULL;
  PyBoolObject *__pyx_v_ani = 0;
  unsigned int __pyx_v_nt;
  unsigned int __pyx_v_axm;
  unsigned int __pyx_v_ii;
  unsigned int __pyx_v_jj;
  unsigned int __pyx_v_N;
  unsigned int __pyx_v_ND;
  double __pyx_v_kkk;
  double __pyx_v_D0;
  double __pyx_v_D1;
  double __pyx_v_D2;
  double __pyx_v_u0;
  double __pyx_v_u1;
  double __pyx_v_u2;
  double __pyx_v_dl0;
  double __pyx_v_dl;
  PyArrayObject *__pyx_v_pts = 0;
  PyArrayObject *__pyx_v_sig = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_pts;
  __Pyx_Buffer __pyx_pybuffer_pts;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sig;
  __Pyx_Buffer __pyx_pybuffer_sig;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_calc_signal", 0);
  __Pyx_INCREF(__pyx_v_dLMode);
  __Pyx_INCREF(__pyx_v_method);
  __pyx_pybuffer_pts.pybuffer.buf = NULL;
  __pyx_pybuffer_pts.refcount = 0;
  __pyx_pybuffernd_pts.data = NULL;
  __pyx_pybuffernd_pts.rcbuffer = &__pyx_pybuffer_pts;
  __pyx_pybuffer_sig.pybuffer.buf = NULL;
  __pyx_pybuffer_sig.refcount = 0;
  __pyx_pybuffernd_sig.data = NULL;
  __pyx_pybuffernd_sig.rcbuffer = &__pyx_pybuffer_sig;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sig.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_calc_signal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sig.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_C0);
  __Pyx_XDECREF(__pyx_v_C1);
  __Pyx_XDECREF((PyObject *)__pyx_v_ani);
  __Pyx_XDECREF((PyObject *)__pyx_v_pts);
  __Pyx_XDECREF((PyObject *)__pyx_v_sig);
  __PYX_XDEC_MEMVIEW(&__pyx_v_Ds, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_us, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_DLs, 1);
  __Pyx_XDECREF(__pyx_v_dLMode);
  __Pyx_XDECREF(__pyx_v_method);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__214 = PyTuple_Pack(31, __pyx_n_s_ff, __pyx_n_s_Ds, __pyx_n_s_us, __pyx_n_s_dL, __pyx_n_s_DLs, __pyx_n_s_t, __pyx_n_s_Ani, __pyx_n_s_fkwdargs, __pyx_n_s_dLMode, __pyx_n_s_method, __pyx_n_s_Test, __pyx_n_s_C0, __pyx_n_s_C1, __pyx_n_s_ani, __pyx_n_s_nt, __pyx_n_s_axm, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_N, __pyx_n_s_ND, __pyx_n_s_kkk, __pyx_n_s_D0, __pyx_n_s_D1, __pyx_n_s_D2, __pyx_n_s_u0, __pyx_n_s_u1, __pyx_n_s_u2, __pyx_n_s_dl0, __pyx_n_s_dl, __pyx_n_s_pts, __pyx_n_s_sig); if (unlikely(!__pyx_tuple__214)) __PYX_ERR(0, 4392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__214);
  __Pyx_GIVEREF(__pyx_tuple__214);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_57LOS_calc_signal, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_calc_signal, __pyx_t_1) < 0) __PYX_ERR(0, 4392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__215 = (PyObject*)__Pyx_PyCode_New(11, 0, 31, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__214, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_calc_signal, 4392, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__215)) __PYX_ERR(0, 4392, __pyx_L1_error)
+4393:                    double[:,::1] DLs, t=None, Ani=None, dict fkwdargs={},
    values[5] = ((PyObject *)Py_None);
    values[6] = ((PyObject *)Py_None);
    values[7] = __pyx_k__86;
    values[8] = ((PyObject*)__pyx_n_s_abs);
    values[9] = ((PyObject*)__pyx_n_s_simps);
/* … */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__86 = ((PyObject*)__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;
 4394:                    str dLMode='abs', str method='simps',
+4395:                    Test=True):
    values[10] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ff)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ds)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_calc_signal", 0, 5, 11, 1); __PYX_ERR(0, 4392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_us)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_calc_signal", 0, 5, 11, 2); __PYX_ERR(0, 4392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dL)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_calc_signal", 0, 5, 11, 3); __PYX_ERR(0, 4392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DLs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_calc_signal", 0, 5, 11, 4); __PYX_ERR(0, 4392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ani);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_fkwdargs);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dLMode);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[10] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_calc_signal") < 0)) __PYX_ERR(0, 4392, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ff = values[0];
    __pyx_v_Ds = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_Ds.memview)) __PYX_ERR(0, 4392, __pyx_L3_error)
    __pyx_v_us = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_us.memview)) __PYX_ERR(0, 4392, __pyx_L3_error)
    __pyx_v_dL = values[3];
    __pyx_v_DLs = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_DLs.memview)) __PYX_ERR(0, 4393, __pyx_L3_error)
    __pyx_v_t = values[5];
    __pyx_v_Ani = values[6];
    __pyx_v_fkwdargs = ((PyObject*)values[7]);
    __pyx_v_dLMode = ((PyObject*)values[8]);
    __pyx_v_method = ((PyObject*)values[9]);
    __pyx_v_Test = values[10];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_calc_signal", 0, 5, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4392, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_calc_signal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_fkwdargs), (&PyDict_Type), 1, "fkwdargs", 1))) __PYX_ERR(0, 4393, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dLMode), (&PyString_Type), 1, "dLMode", 1))) __PYX_ERR(0, 4394, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_method), (&PyString_Type), 1, "method", 1))) __PYX_ERR(0, 4394, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_56LOS_calc_signal(__pyx_self, __pyx_v_ff, __pyx_v_Ds, __pyx_v_us, __pyx_v_dL, __pyx_v_DLs, __pyx_v_t, __pyx_v_Ani, __pyx_v_fkwdargs, __pyx_v_dLMode, __pyx_v_method, __pyx_v_Test);
 4396: 
 4397:     """ Return the sampled line, with the specified method
 4398: 
 4399:     'linspace': return the N+1 edges, including the first and last point
 4400:     'sum' :     return N segments centers
 4401:     'simps':    return N+1 egdes, N even (for scipy.integrate.simps)
 4402:     'romb' :    return N+1 edges, N+1 = 2**k+1 (for scipy.integrate.romb)
 4403:     """
+4404:     if Test:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4404, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
  }
+4405:         assert Ds.shape[0]==us.shape[0]==3, "Args Ds, us - dim 0"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = ((__pyx_v_Ds.shape[0]) == (__pyx_v_us.shape[0]));
      if (__pyx_t_1) {
        __pyx_t_1 = ((__pyx_v_us.shape[0]) == 3);
      }
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_Ds_us_dim_0);
        __PYX_ERR(0, 4405, __pyx_L1_error)
      }
    }
    #endif
+4406:         assert DLs.shape[0]==2, "Arg DLs - dim 0"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!(((__pyx_v_DLs.shape[0]) == 2) != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_DLs_dim_0);
        __PYX_ERR(0, 4406, __pyx_L1_error)
      }
    }
    #endif
+4407:         assert Ds.shape[1]==us.shape[1]==DLs.shape[1], "Args Ds, us, DLs 1"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = ((__pyx_v_Ds.shape[1]) == (__pyx_v_us.shape[1]));
      if (__pyx_t_1) {
        __pyx_t_1 = ((__pyx_v_us.shape[1]) == (__pyx_v_DLs.shape[1]));
      }
      if (unlikely(!(__pyx_t_1 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_Ds_us_DLs_1);
        __PYX_ERR(0, 4407, __pyx_L1_error)
      }
    }
    #endif
+4408:         C0 = not hasattr(dL,'__iter__') and dL>0.
    __pyx_t_1 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4408, __pyx_L1_error)
    __pyx_t_3 = (!(__pyx_t_1 != 0));
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_4 = PyObject_RichCompare(__pyx_v_dL, __pyx_float_0_, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4408, __pyx_L1_error)
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_L4_bool_binop_done:;
    __pyx_v_C0 = __pyx_t_2;
    __pyx_t_2 = 0;
+4409:         C1 = hasattr(dL,'__iter__') and len(dL)==Ds.shape[1] and np.all(dL>0.)
    __pyx_t_3 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 4409, __pyx_L1_error)
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4409, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L6_bool_binop_done;
    }
    __pyx_t_5 = PyObject_Length(__pyx_v_dL); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4409, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_5 == (__pyx_v_Ds.shape[1]));
    if (__pyx_t_3) {
    } else {
      __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4409, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_2 = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L6_bool_binop_done;
    }
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_all); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyObject_RichCompare(__pyx_v_dL, __pyx_float_0_, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4409, __pyx_L1_error)
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_7, function);
      }
    }
    __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4409, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_INCREF(__pyx_t_4);
    __pyx_t_2 = __pyx_t_4;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_L6_bool_binop_done:;
    __pyx_v_C1 = __pyx_t_2;
    __pyx_t_2 = 0;
+4410:         assert C0 or C1, "Arg dL must be >0.!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C0); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4410, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L9_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_C1); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4410, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L9_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_dL_must_be_0);
        __PYX_ERR(0, 4410, __pyx_L1_error)
      }
    }
    #endif
+4411:         assert dLMode.lower() in ['abs','rel'], "Arg dLMode in ['abs','rel']"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_dLMode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_abs, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4411, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4411, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L11_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_dLMode_in_abs_rel);
        __PYX_ERR(0, 4411, __pyx_L1_error)
      }
    }
    #endif
+4412:         assert method.lower() in ['sum','simps','romb'], "Arg method"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4412, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4412, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4412, __pyx_L1_error)
      if (!__pyx_t_1) {
      } else {
        __pyx_t_3 = __pyx_t_1;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_romb, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4412, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_1;
      __pyx_L13_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_method);
        __PYX_ERR(0, 4412, __pyx_L1_error)
      }
    }
    #endif
 4413:     # Testing function
+4414:     cdef bool ani = check_ff(ff,t=t,Ani=Ani)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_check_ff); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_ff);
  __Pyx_GIVEREF(__pyx_v_ff);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_ff);
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4414, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Ani, __pyx_v_Ani) < 0) __PYX_ERR(0, 4414, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 4414, __pyx_L1_error)
  __pyx_v_ani = ((PyBoolObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 4415: 
+4416:     cdef unsigned int nt, axm, ii, jj, N, ND = Ds.shape[1]
  __pyx_v_ND = (__pyx_v_Ds.shape[1]);
 4417:     cdef double kkk, D0, D1, D2, u0, u1, u2, dl0, dl
 4418:     cdef np.ndarray[double,ndim=2] pts
+4419:     if t is None or not hasattr(t,'__iter__'):
  __pyx_t_1 = (__pyx_v_t == Py_None);
  __pyx_t_9 = (__pyx_t_1 != 0);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_3 = __pyx_t_9;
    goto __pyx_L17_bool_binop_done;
  }
  __pyx_t_9 = __Pyx_HasAttr(__pyx_v_t, __pyx_n_s_iter); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 4419, __pyx_L1_error)
  __pyx_t_1 = ((!(__pyx_t_9 != 0)) != 0);
  __pyx_t_3 = __pyx_t_1;
  __pyx_L17_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
    goto __pyx_L16;
  }
+4420:         nt = 1
    __pyx_v_nt = 1;
+4421:         axm = 0
    __pyx_v_axm = 0;
 4422:     else:
+4423:         nt = len(t)
  /*else*/ {
    __pyx_t_5 = PyObject_Length(__pyx_v_t); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4423, __pyx_L1_error)
    __pyx_v_nt = __pyx_t_5;
+4424:         axm = 1
    __pyx_v_axm = 1;
  }
  __pyx_L16:;
+4425:     cdef np.ndarray[double,ndim=2] sig = np.empty((nt,ND),dtype=float)
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nt); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ND); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
  __pyx_t_6 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4425, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4425, __pyx_L1_error)
  __pyx_t_10 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sig.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sig = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sig.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4425, __pyx_L1_error)
    } else {__pyx_pybuffernd_sig.diminfo[0].strides = __pyx_pybuffernd_sig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sig.diminfo[0].shape = __pyx_pybuffernd_sig.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sig.diminfo[1].strides = __pyx_pybuffernd_sig.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sig.diminfo[1].shape = __pyx_pybuffernd_sig.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_10 = 0;
  __pyx_v_sig = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
 4426: 
+4427:     dLMode = dLMode.lower()
  __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_dLMode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4427, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 4427, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_dLMode, ((PyObject*)__pyx_t_6));
  __pyx_t_6 = 0;
+4428:     method = method.lower()
  __pyx_t_6 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_method); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4428, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (!(likely(PyString_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 4428, __pyx_L1_error)
  __Pyx_DECREF_SET(__pyx_v_method, ((PyObject*)__pyx_t_6));
  __pyx_t_6 = 0;
 4429:     # Case with unique dL
+4430:     if not hasattr(dL,'__iter__'):
  __pyx_t_3 = __Pyx_HasAttr(__pyx_v_dL, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 4430, __pyx_L1_error)
  __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L19;
  }
+4431:         if dLMode=='rel':
    __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_dLMode, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4431, __pyx_L1_error)
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
/* … */
      goto __pyx_L20;
    }
+4432:             N = <long>(Cceil(1./dL))
      __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_v_dL, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4432, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4432, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_N = ((long)ceil(__pyx_t_11));
+4433:             if method=='sum':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4433, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L21;
      }
+4434:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4435:                     dl0 = DLs[0,ii]
          __pyx_t_15 = 0;
          __pyx_t_16 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_15 * __pyx_v_DLs.strides[0]) )) + __pyx_t_16)) )));
+4436:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_17 = 1;
          __pyx_t_18 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_17 * __pyx_v_DLs.strides[0]) )) + __pyx_t_18)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4437:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_19 = 0;
          __pyx_t_20 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_19 * __pyx_v_Ds.strides[0]) )) + __pyx_t_20)) )));
          __pyx_t_21 = 1;
          __pyx_t_22 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_21 * __pyx_v_Ds.strides[0]) )) + __pyx_t_22)) )));
          __pyx_t_24 = 2;
          __pyx_t_25 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_24 * __pyx_v_Ds.strides[0]) )) + __pyx_t_25)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4438:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_27 = 0;
          __pyx_t_28 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_27 * __pyx_v_us.strides[0]) )) + __pyx_t_28)) )));
          __pyx_t_29 = 1;
          __pyx_t_30 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_29 * __pyx_v_us.strides[0]) )) + __pyx_t_30)) )));
          __pyx_t_31 = 2;
          __pyx_t_32 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_31 * __pyx_v_us.strides[0]) )) + __pyx_t_32)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4439:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4439, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4439, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4439, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4439, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4440:                     for jj in range(0,N):
          __pyx_t_38 = __pyx_v_N;
          __pyx_t_39 = __pyx_t_38;
          for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
            __pyx_v_jj = __pyx_t_40;
+4441:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4442:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_41 = 0;
            __pyx_t_42 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_41, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_42, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4443:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_43 = 1;
            __pyx_t_44 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_43, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_44, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4444:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_45 = 2;
            __pyx_t_46 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_45, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_46, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4445:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4445, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4446:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4446, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4446, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4446, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4446, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_6);
            __pyx_t_7 = 0;
            __pyx_t_4 = 0;
            __pyx_t_6 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4446, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_2) < 0)) __PYX_ERR(0, 4446, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4447:                     sig[:,ii] = np.sum(ff(pts,t=t,**fkwdargs),axis=axm)*dl
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4447, __pyx_L1_error)
          __pyx_t_4 = __pyx_t_7;
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4447, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_4, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4447, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_axis, __pyx_t_2) < 0) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_2, __pyx_t_4) < 0)) __PYX_ERR(0, 4447, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
 4448: 
+4449:             elif method=='simps':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4449, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L21;
      }
+4450:                 N = N if N%2==0 else N+1
        if ((((__pyx_v_N % 2) == 0) != 0)) {
          __pyx_t_47 = __pyx_v_N;
        } else {
          __pyx_t_47 = (__pyx_v_N + 1);
        }
        __pyx_v_N = __pyx_t_47;
+4451:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4452:                     dl0 = DLs[0,ii]
          __pyx_t_48 = 0;
          __pyx_t_49 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_48 * __pyx_v_DLs.strides[0]) )) + __pyx_t_49)) )));
+4453:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_50 = 1;
          __pyx_t_51 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_50 * __pyx_v_DLs.strides[0]) )) + __pyx_t_51)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4454:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_52 = 0;
          __pyx_t_53 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_52 * __pyx_v_Ds.strides[0]) )) + __pyx_t_53)) )));
          __pyx_t_54 = 1;
          __pyx_t_55 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_54 * __pyx_v_Ds.strides[0]) )) + __pyx_t_55)) )));
          __pyx_t_56 = 2;
          __pyx_t_57 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_56 * __pyx_v_Ds.strides[0]) )) + __pyx_t_57)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4455:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_58 = 0;
          __pyx_t_59 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_58 * __pyx_v_us.strides[0]) )) + __pyx_t_59)) )));
          __pyx_t_60 = 1;
          __pyx_t_61 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_60 * __pyx_v_us.strides[0]) )) + __pyx_t_61)) )));
          __pyx_t_62 = 2;
          __pyx_t_63 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_62 * __pyx_v_us.strides[0]) )) + __pyx_t_63)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4456:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4456, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4456, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4456, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4456, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4457:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4458:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4459:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_65 = 0;
            __pyx_t_66 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_65, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_66, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4460:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_67 = 1;
            __pyx_t_68 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_67, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_68, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4461:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_69 = 2;
            __pyx_t_70 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_69, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_70, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4462:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4462, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4463:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4463, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4463, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4463, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4463, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_4);
            __pyx_t_6 = 0;
            __pyx_t_7 = 0;
            __pyx_t_4 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4463, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_2) < 0)) __PYX_ERR(0, 4463, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+4464:                     sig[:,ii] = scpintg.simps(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_simps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4464, __pyx_L1_error)
          __pyx_t_7 = __pyx_t_6;
          __pyx_t_6 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4464, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_7, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4464, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
          __pyx_t_6 = 0;
/* … */
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_7, __pyx_t_2) < 0)) __PYX_ERR(0, 4464, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        }
+4465:                                               x=None,dx=dl,axis=axm)
          __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4465, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_x, Py_None) < 0) __PYX_ERR(0, 4465, __pyx_L1_error)
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4465, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dx, __pyx_t_2) < 0) __PYX_ERR(0, 4465, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4465, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_t_2) < 0) __PYX_ERR(0, 4465, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 4466: 
 4467:             else:
+4468:                 N = 2**(<long>(Cceil(Clog2(<double>N))))
      /*else*/ {
        __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4469:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4470:                     dl0 = DLs[0,ii]
          __pyx_t_71 = 0;
          __pyx_t_72 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_71 * __pyx_v_DLs.strides[0]) )) + __pyx_t_72)) )));
+4471:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_73 = 1;
          __pyx_t_74 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_73 * __pyx_v_DLs.strides[0]) )) + __pyx_t_74)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4472:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_75 = 0;
          __pyx_t_76 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_75 * __pyx_v_Ds.strides[0]) )) + __pyx_t_76)) )));
          __pyx_t_77 = 1;
          __pyx_t_78 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_77 * __pyx_v_Ds.strides[0]) )) + __pyx_t_78)) )));
          __pyx_t_79 = 2;
          __pyx_t_80 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_79 * __pyx_v_Ds.strides[0]) )) + __pyx_t_80)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4473:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_81 = 0;
          __pyx_t_82 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_81 * __pyx_v_us.strides[0]) )) + __pyx_t_82)) )));
          __pyx_t_83 = 1;
          __pyx_t_84 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_83 * __pyx_v_us.strides[0]) )) + __pyx_t_84)) )));
          __pyx_t_85 = 2;
          __pyx_t_86 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_85 * __pyx_v_us.strides[0]) )) + __pyx_t_86)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4474:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4474, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4474, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4474, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4474, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4475:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4476:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4477:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_87 = 0;
            __pyx_t_88 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_87, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_88, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4478:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_89 = 1;
            __pyx_t_90 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_89, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_90, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4479:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_91 = 2;
            __pyx_t_92 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_91, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_92, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4480:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4480, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4481:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4481, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4481, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4481, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4481, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_2);
            __pyx_t_4 = 0;
            __pyx_t_6 = 0;
            __pyx_t_2 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4481, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_7) < 0)) __PYX_ERR(0, 4481, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4482:                     sig[:,ii] = scpintg.romb(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_romb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4482, __pyx_L1_error)
          __pyx_t_6 = __pyx_t_4;
          __pyx_t_4 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4482, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_6, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4482, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
/* … */
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_6, __pyx_t_7) < 0)) __PYX_ERR(0, 4482, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
      }
      __pyx_L21:;
+4483:                                              dx=dl,axis=axm,show=False)
          __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4483, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4483, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dx, __pyx_t_7) < 0) __PYX_ERR(0, 4483, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4483, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4483, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_show, Py_False) < 0) __PYX_ERR(0, 4483, __pyx_L1_error)
 4484: 
 4485:         else:
+4486:             if method=='sum':
    /*else*/ {
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4486, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L37;
      }
+4487:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4488:                     dl0 = DLs[0,ii]
          __pyx_t_93 = 0;
          __pyx_t_94 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_93 * __pyx_v_DLs.strides[0]) )) + __pyx_t_94)) )));
 4489:                     # Compute the number of intervals to satisfy the resolution
+4490:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_95 = 1;
          __pyx_t_96 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_95 * __pyx_v_DLs.strides[0]) )) + __pyx_t_96)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4490, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_dL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4490, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4490, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4491:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_97 = 1;
          __pyx_t_98 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_97 * __pyx_v_DLs.strides[0]) )) + __pyx_t_98)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4492:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_99 = 0;
          __pyx_t_100 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_99 * __pyx_v_Ds.strides[0]) )) + __pyx_t_100)) )));
          __pyx_t_101 = 1;
          __pyx_t_102 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_101 * __pyx_v_Ds.strides[0]) )) + __pyx_t_102)) )));
          __pyx_t_103 = 2;
          __pyx_t_104 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_103 * __pyx_v_Ds.strides[0]) )) + __pyx_t_104)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4493:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_105 = 0;
          __pyx_t_106 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_105 * __pyx_v_us.strides[0]) )) + __pyx_t_106)) )));
          __pyx_t_107 = 1;
          __pyx_t_108 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_107 * __pyx_v_us.strides[0]) )) + __pyx_t_108)) )));
          __pyx_t_109 = 2;
          __pyx_t_110 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_109 * __pyx_v_us.strides[0]) )) + __pyx_t_110)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4494:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4494, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4494, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4494, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4494, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4495:                     for jj in range(0,N):
          __pyx_t_38 = __pyx_v_N;
          __pyx_t_39 = __pyx_t_38;
          for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
            __pyx_v_jj = __pyx_t_40;
+4496:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4497:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_111 = 0;
            __pyx_t_112 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_111, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_112, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4498:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_113 = 1;
            __pyx_t_114 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_113, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_114, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4499:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_115 = 2;
            __pyx_t_116 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_115, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_116, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4500:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4500, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4501:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4501, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4501, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4501, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4501, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_6);
            __pyx_t_2 = 0;
            __pyx_t_4 = 0;
            __pyx_t_6 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4501, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_7) < 0)) __PYX_ERR(0, 4501, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4502:                     sig[:,ii] = np.sum(ff(pts,t=t,**fkwdargs),axis=axm)*dl
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4502, __pyx_L1_error)
          __pyx_t_4 = __pyx_t_2;
          __pyx_t_2 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4502, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_4, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4502, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = PyNumber_Multiply(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_7, __pyx_t_4) < 0)) __PYX_ERR(0, 4502, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
 4503: 
+4504:             elif method=='simps':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4504, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L37;
      }
+4505:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4506:                     dl0 = DLs[0,ii]
          __pyx_t_117 = 0;
          __pyx_t_118 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_117 * __pyx_v_DLs.strides[0]) )) + __pyx_t_118)) )));
 4507:                     # Compute the number of intervals to satisfy the resolution
+4508:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_119 = 1;
          __pyx_t_120 = __pyx_v_ii;
          __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_119 * __pyx_v_DLs.strides[0]) )) + __pyx_t_120)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4508, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_dL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4508, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_7); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4508, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4509:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_47 = __pyx_v_N;
          } else {
            __pyx_t_47 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_47;
+4510:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_121 = 1;
          __pyx_t_122 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_121 * __pyx_v_DLs.strides[0]) )) + __pyx_t_122)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4511:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_123 = 0;
          __pyx_t_124 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_123 * __pyx_v_Ds.strides[0]) )) + __pyx_t_124)) )));
          __pyx_t_125 = 1;
          __pyx_t_126 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_125 * __pyx_v_Ds.strides[0]) )) + __pyx_t_126)) )));
          __pyx_t_127 = 2;
          __pyx_t_128 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_127 * __pyx_v_Ds.strides[0]) )) + __pyx_t_128)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4512:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_129 = 0;
          __pyx_t_130 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_129 * __pyx_v_us.strides[0]) )) + __pyx_t_130)) )));
          __pyx_t_131 = 1;
          __pyx_t_132 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_131 * __pyx_v_us.strides[0]) )) + __pyx_t_132)) )));
          __pyx_t_133 = 2;
          __pyx_t_134 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_133 * __pyx_v_us.strides[0]) )) + __pyx_t_134)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4513:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4513, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4513, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4513, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4513, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4514:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4515:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4516:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_135 = 0;
            __pyx_t_136 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_135, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_136, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4517:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_137 = 1;
            __pyx_t_138 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_137, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_138, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4518:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_139 = 2;
            __pyx_t_140 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_139, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_140, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4519:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4519, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4520:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4520, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4520, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4520, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4520, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_7);
            __pyx_t_6 = 0;
            __pyx_t_2 = 0;
            __pyx_t_7 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4520, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_4) < 0)) __PYX_ERR(0, 4520, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4521:                     sig[:,ii] = scpintg.simps(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_simps); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4521, __pyx_L1_error)
          __pyx_t_2 = __pyx_t_6;
          __pyx_t_6 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4521, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4521, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
/* … */
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_2, __pyx_t_4) < 0)) __PYX_ERR(0, 4521, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
+4522:                                               x=None,dx=dl,axis=axm)
          __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4522, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_x, Py_None) < 0) __PYX_ERR(0, 4522, __pyx_L1_error)
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4522, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dx, __pyx_t_4) < 0) __PYX_ERR(0, 4522, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4522, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_t_4) < 0) __PYX_ERR(0, 4522, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4523: 
 4524:             else:
+4525:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4526:                     dl0 = DLs[0,ii]
          __pyx_t_141 = 0;
          __pyx_t_142 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_141 * __pyx_v_DLs.strides[0]) )) + __pyx_t_142)) )));
 4527:                     # Compute the number of intervals to satisfy the resolution
+4528:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL))
          __pyx_t_143 = 1;
          __pyx_t_144 = __pyx_v_ii;
          __pyx_t_4 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_143 * __pyx_v_DLs.strides[0]) )) + __pyx_t_144)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4528, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_dL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4528, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4528, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4529:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4530:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_145 = 1;
          __pyx_t_146 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_145 * __pyx_v_DLs.strides[0]) )) + __pyx_t_146)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4531:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_147 = 0;
          __pyx_t_148 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_147 * __pyx_v_Ds.strides[0]) )) + __pyx_t_148)) )));
          __pyx_t_149 = 1;
          __pyx_t_150 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_149 * __pyx_v_Ds.strides[0]) )) + __pyx_t_150)) )));
          __pyx_t_151 = 2;
          __pyx_t_152 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_151 * __pyx_v_Ds.strides[0]) )) + __pyx_t_152)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4532:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_153 = 0;
          __pyx_t_154 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_153 * __pyx_v_us.strides[0]) )) + __pyx_t_154)) )));
          __pyx_t_155 = 1;
          __pyx_t_156 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_155 * __pyx_v_us.strides[0]) )) + __pyx_t_156)) )));
          __pyx_t_157 = 2;
          __pyx_t_158 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_157 * __pyx_v_us.strides[0]) )) + __pyx_t_158)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4533:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4533, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4533, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4533, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_7);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4533, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_7));
          __pyx_t_7 = 0;
+4534:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4535:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4536:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_159 = 0;
            __pyx_t_160 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_159, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_160, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4537:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_161 = 1;
            __pyx_t_162 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_161, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_162, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4538:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_163 = 2;
            __pyx_t_164 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_163, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_164, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4539:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4539, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4540:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4540, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4540, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4540, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4540, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
            __pyx_t_7 = 0;
            __pyx_t_6 = 0;
            __pyx_t_2 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4540, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_4) < 0)) __PYX_ERR(0, 4540, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4541:                     sig[:,ii] = scpintg.romb(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_romb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4541, __pyx_L1_error)
          __pyx_t_6 = __pyx_t_7;
          __pyx_t_7 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4541, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_6, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4541, __pyx_L1_error)
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
          __pyx_t_7 = 0;
/* … */
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_6, __pyx_t_4) < 0)) __PYX_ERR(0, 4541, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
      }
      __pyx_L37:;
    }
    __pyx_L20:;
+4542:                                              dx=dl,axis=axm,show=False)
          __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4542, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4542, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dx, __pyx_t_4) < 0) __PYX_ERR(0, 4542, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4542, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_axis, __pyx_t_4) < 0) __PYX_ERR(0, 4542, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_show, Py_False) < 0) __PYX_ERR(0, 4542, __pyx_L1_error)
 4543: 
 4544:     # Case with different resolution for each LOS
 4545:     else:
+4546:         if dLMode=='rel':
  /*else*/ {
    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_dLMode, __pyx_n_s_rel, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4546, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_3 != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L53;
    }
+4547:             if method=='sum':
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4547, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L54;
      }
+4548:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4549:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4549, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_4, 1., 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4549, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4549, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4550:                     dl0 = DLs[0,ii]
          __pyx_t_165 = 0;
          __pyx_t_166 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_165 * __pyx_v_DLs.strides[0]) )) + __pyx_t_166)) )));
+4551:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_167 = 1;
          __pyx_t_168 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_167 * __pyx_v_DLs.strides[0]) )) + __pyx_t_168)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4552:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_169 = 0;
          __pyx_t_170 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_169 * __pyx_v_Ds.strides[0]) )) + __pyx_t_170)) )));
          __pyx_t_171 = 1;
          __pyx_t_172 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_171 * __pyx_v_Ds.strides[0]) )) + __pyx_t_172)) )));
          __pyx_t_173 = 2;
          __pyx_t_174 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_173 * __pyx_v_Ds.strides[0]) )) + __pyx_t_174)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4553:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_175 = 0;
          __pyx_t_176 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_175 * __pyx_v_us.strides[0]) )) + __pyx_t_176)) )));
          __pyx_t_177 = 1;
          __pyx_t_178 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_177 * __pyx_v_us.strides[0]) )) + __pyx_t_178)) )));
          __pyx_t_179 = 2;
          __pyx_t_180 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_179 * __pyx_v_us.strides[0]) )) + __pyx_t_180)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4554:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4554, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4554, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4554, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4555:                     for jj in range(0,N):
          __pyx_t_38 = __pyx_v_N;
          __pyx_t_39 = __pyx_t_38;
          for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
            __pyx_v_jj = __pyx_t_40;
+4556:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4557:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_181 = 0;
            __pyx_t_182 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_181, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_182, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4558:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_183 = 1;
            __pyx_t_184 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_183, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_184, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4559:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_185 = 2;
            __pyx_t_186 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_185, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_186, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4560:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4560, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4561:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4561, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4561, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4561, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4561, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_6);
            __pyx_t_2 = 0;
            __pyx_t_7 = 0;
            __pyx_t_6 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4561, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_4) < 0)) __PYX_ERR(0, 4561, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+4562:                     sig[:,ii] = np.sum(ff(pts,t=t,**fkwdargs),axis=axm)*dl
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
          __pyx_t_7 = __pyx_t_2;
          __pyx_t_2 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4562, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_7, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_t_4) < 0) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyNumber_Multiply(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_4, __pyx_t_7) < 0)) __PYX_ERR(0, 4562, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
+4563:             elif method=='simps':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4563, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L54;
      }
+4564:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4565:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4565, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_7, 1., 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4565, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4565, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4566:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_47 = __pyx_v_N;
          } else {
            __pyx_t_47 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_47;
+4567:                     dl0 = DLs[0,ii]
          __pyx_t_187 = 0;
          __pyx_t_188 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_187 * __pyx_v_DLs.strides[0]) )) + __pyx_t_188)) )));
+4568:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_189 = 1;
          __pyx_t_190 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_189 * __pyx_v_DLs.strides[0]) )) + __pyx_t_190)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4569:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_191 = 0;
          __pyx_t_192 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_191 * __pyx_v_Ds.strides[0]) )) + __pyx_t_192)) )));
          __pyx_t_193 = 1;
          __pyx_t_194 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_193 * __pyx_v_Ds.strides[0]) )) + __pyx_t_194)) )));
          __pyx_t_195 = 2;
          __pyx_t_196 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_195 * __pyx_v_Ds.strides[0]) )) + __pyx_t_196)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4570:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_197 = 0;
          __pyx_t_198 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_197 * __pyx_v_us.strides[0]) )) + __pyx_t_198)) )));
          __pyx_t_199 = 1;
          __pyx_t_200 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_199 * __pyx_v_us.strides[0]) )) + __pyx_t_200)) )));
          __pyx_t_201 = 2;
          __pyx_t_202 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_201 * __pyx_v_us.strides[0]) )) + __pyx_t_202)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4571:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4571, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4571, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4571, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_6);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4571, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_6));
          __pyx_t_6 = 0;
+4572:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4573:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4574:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_203 = 0;
            __pyx_t_204 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_203, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_204, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4575:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_205 = 1;
            __pyx_t_206 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_205, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_206, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4576:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_207 = 2;
            __pyx_t_208 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_207, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_208, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4577:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4577, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4578:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4578, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4578, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4578, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4578, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
            __pyx_t_6 = 0;
            __pyx_t_2 = 0;
            __pyx_t_4 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4578, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_7) < 0)) __PYX_ERR(0, 4578, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4579:                     sig[:,ii] = scpintg.simps(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_simps); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
          __pyx_t_2 = __pyx_t_6;
          __pyx_t_6 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4579, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_2, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4579, __pyx_L1_error)
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
/* … */
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
          __pyx_t_6 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_2, __pyx_t_7) < 0)) __PYX_ERR(0, 4579, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
+4580:                                               x=None,dx=dl,axis=axm)
          __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4580, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_x, Py_None) < 0) __PYX_ERR(0, 4580, __pyx_L1_error)
          __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4580, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dx, __pyx_t_7) < 0) __PYX_ERR(0, 4580, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4580, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4580, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 4581: 
 4582:             else:
+4583:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4584:                     N = <long>(Cceil(1./dL[ii]))
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4584, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_, __pyx_t_7, 1., 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4584, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4584, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4585:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4586:                     dl0 = DLs[0,ii]
          __pyx_t_209 = 0;
          __pyx_t_210 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_209 * __pyx_v_DLs.strides[0]) )) + __pyx_t_210)) )));
+4587:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_211 = 1;
          __pyx_t_212 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_211 * __pyx_v_DLs.strides[0]) )) + __pyx_t_212)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4588:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_213 = 0;
          __pyx_t_214 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_213 * __pyx_v_Ds.strides[0]) )) + __pyx_t_214)) )));
          __pyx_t_215 = 1;
          __pyx_t_216 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_215 * __pyx_v_Ds.strides[0]) )) + __pyx_t_216)) )));
          __pyx_t_217 = 2;
          __pyx_t_218 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_217 * __pyx_v_Ds.strides[0]) )) + __pyx_t_218)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4589:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_219 = 0;
          __pyx_t_220 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_219 * __pyx_v_us.strides[0]) )) + __pyx_t_220)) )));
          __pyx_t_221 = 1;
          __pyx_t_222 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_221 * __pyx_v_us.strides[0]) )) + __pyx_t_222)) )));
          __pyx_t_223 = 2;
          __pyx_t_224 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_223 * __pyx_v_us.strides[0]) )) + __pyx_t_224)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4590:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4590, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4590, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4590, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4590, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4591:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4592:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4593:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_225 = 0;
            __pyx_t_226 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_225, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_226, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4594:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_227 = 1;
            __pyx_t_228 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_227, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_228, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4595:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_229 = 2;
            __pyx_t_230 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_229, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_230, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4596:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4596, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4597:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4597, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4597, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4597, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4597, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_2);
            __pyx_t_4 = 0;
            __pyx_t_6 = 0;
            __pyx_t_2 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4597, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_7) < 0)) __PYX_ERR(0, 4597, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4598:                     sig[:,ii] = scpintg.romb(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_romb); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4598, __pyx_L1_error)
          __pyx_t_6 = __pyx_t_4;
          __pyx_t_4 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4598, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_6, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4598, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
          __pyx_t_4 = 0;
/* … */
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_6, __pyx_t_7) < 0)) __PYX_ERR(0, 4598, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
      }
      __pyx_L54:;
+4599:                                              dx=dl,axis=axm,show=False)
          __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4599, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4599, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dx, __pyx_t_7) < 0) __PYX_ERR(0, 4599, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4599, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4599, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_show, Py_False) < 0) __PYX_ERR(0, 4599, __pyx_L1_error)
 4600: 
 4601:         else:
+4602:             if method=='sum':
    /*else*/ {
      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_sum, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4602, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_1 != 0);
      if (__pyx_t_3) {
/* … */
        goto __pyx_L70;
      }
+4603:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4604:                     dl0 = DLs[0,ii]
          __pyx_t_231 = 0;
          __pyx_t_232 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_231 * __pyx_v_DLs.strides[0]) )) + __pyx_t_232)) )));
 4605:                     # Compute the number of intervals to satisfy the resolution
+4606:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_233 = 1;
          __pyx_t_234 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_233 * __pyx_v_DLs.strides[0]) )) + __pyx_t_234)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4606, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4606, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4606, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4606, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4607:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_235 = 1;
          __pyx_t_236 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_235 * __pyx_v_DLs.strides[0]) )) + __pyx_t_236)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4608:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_237 = 0;
          __pyx_t_238 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_237 * __pyx_v_Ds.strides[0]) )) + __pyx_t_238)) )));
          __pyx_t_239 = 1;
          __pyx_t_240 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_239 * __pyx_v_Ds.strides[0]) )) + __pyx_t_240)) )));
          __pyx_t_241 = 2;
          __pyx_t_242 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_241 * __pyx_v_Ds.strides[0]) )) + __pyx_t_242)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4609:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_243 = 0;
          __pyx_t_244 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_243 * __pyx_v_us.strides[0]) )) + __pyx_t_244)) )));
          __pyx_t_245 = 1;
          __pyx_t_246 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_245 * __pyx_v_us.strides[0]) )) + __pyx_t_246)) )));
          __pyx_t_247 = 2;
          __pyx_t_248 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_247 * __pyx_v_us.strides[0]) )) + __pyx_t_248)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4610:                     pts = np.empty((3,N),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_N); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4610, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4610, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4610, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4610, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4611:                     for jj in range(0,N):
          __pyx_t_38 = __pyx_v_N;
          __pyx_t_39 = __pyx_t_38;
          for (__pyx_t_40 = 0; __pyx_t_40 < __pyx_t_39; __pyx_t_40+=1) {
            __pyx_v_jj = __pyx_t_40;
+4612:                         kkk = dl0 + (0.5+<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + ((0.5 + ((double)__pyx_v_jj)) * __pyx_v_dl));
+4613:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_249 = 0;
            __pyx_t_250 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_249, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_250, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4614:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_251 = 1;
            __pyx_t_252 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_251, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_252, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4615:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_253 = 2;
            __pyx_t_254 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_253, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_254, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4616:                     if ani:
          __pyx_t_3 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4616, __pyx_L1_error)
          if (__pyx_t_3) {
/* … */
          }
+4617:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4617, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4617, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4617, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4617, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_4);
            __pyx_t_2 = 0;
            __pyx_t_7 = 0;
            __pyx_t_4 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4617, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_6) < 0)) __PYX_ERR(0, 4617, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4618:                     sig[:,ii] = np.sum(ff(pts,t=t,**fkwdargs),axis=axm)*dl
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sum); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4618, __pyx_L1_error)
          __pyx_t_7 = __pyx_t_2;
          __pyx_t_2 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4618, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_7, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4618, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_t_6) < 0) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyNumber_Multiply(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_6, __pyx_t_7) < 0)) __PYX_ERR(0, 4618, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
 4619: 
+4620:             elif method=='simps':
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_method, __pyx_n_s_simps, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4620, __pyx_L1_error)
      __pyx_t_1 = (__pyx_t_3 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L70;
      }
+4621:                 for ii in range(0,ND):
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4622:                     dl0 = DLs[0,ii]
          __pyx_t_255 = 0;
          __pyx_t_256 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_255 * __pyx_v_DLs.strides[0]) )) + __pyx_t_256)) )));
 4623:                     # Compute the number of intervals to satisfy the resolution
+4624:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_257 = 1;
          __pyx_t_258 = __pyx_v_ii;
          __pyx_t_7 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_257 * __pyx_v_DLs.strides[0]) )) + __pyx_t_258)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4624, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4624, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4624, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4624, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4625:                     N = N if N%2==0 else N+1
          if ((((__pyx_v_N % 2) == 0) != 0)) {
            __pyx_t_47 = __pyx_v_N;
          } else {
            __pyx_t_47 = (__pyx_v_N + 1);
          }
          __pyx_v_N = __pyx_t_47;
+4626:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_259 = 1;
          __pyx_t_260 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_259 * __pyx_v_DLs.strides[0]) )) + __pyx_t_260)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4627:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_261 = 0;
          __pyx_t_262 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_261 * __pyx_v_Ds.strides[0]) )) + __pyx_t_262)) )));
          __pyx_t_263 = 1;
          __pyx_t_264 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_263 * __pyx_v_Ds.strides[0]) )) + __pyx_t_264)) )));
          __pyx_t_265 = 2;
          __pyx_t_266 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_265 * __pyx_v_Ds.strides[0]) )) + __pyx_t_266)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4628:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_267 = 0;
          __pyx_t_268 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_267 * __pyx_v_us.strides[0]) )) + __pyx_t_268)) )));
          __pyx_t_269 = 1;
          __pyx_t_270 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_269 * __pyx_v_us.strides[0]) )) + __pyx_t_270)) )));
          __pyx_t_271 = 2;
          __pyx_t_272 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_271 * __pyx_v_us.strides[0]) )) + __pyx_t_272)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4629:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4629, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4629, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4629, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_4);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_35, &__pyx_t_36, &__pyx_t_37);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_35); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_37);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_35, __pyx_t_36, __pyx_t_37);
              }
              __pyx_t_35 = __pyx_t_36 = __pyx_t_37 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4629, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_4));
          __pyx_t_4 = 0;
+4630:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4631:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4632:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_273 = 0;
            __pyx_t_274 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_273, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_274, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4633:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_275 = 1;
            __pyx_t_276 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_275, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_276, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4634:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_277 = 2;
            __pyx_t_278 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_277, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_278, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4635:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4635, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4636:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4636, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4636, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4636, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4636, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_2);
            __pyx_t_4 = 0;
            __pyx_t_7 = 0;
            __pyx_t_2 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4636, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_6) < 0)) __PYX_ERR(0, 4636, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+4637:                     sig[:,ii] = scpintg.simps(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_simps); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4637, __pyx_L1_error)
          __pyx_t_7 = __pyx_t_4;
          __pyx_t_4 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4637, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_7, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4637, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
          __pyx_t_4 = 0;
/* … */
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_7, __pyx_t_6) < 0)) __PYX_ERR(0, 4637, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
+4638:                                               x=None,dx=dl,axis=axm)
          __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4638, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_x, Py_None) < 0) __PYX_ERR(0, 4638, __pyx_L1_error)
          __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4638, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dx, __pyx_t_6) < 0) __PYX_ERR(0, 4638, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4638, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_axis, __pyx_t_6) < 0) __PYX_ERR(0, 4638, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 4639: 
 4640:             else:
+4641:                 for ii in range(0,ND):
      /*else*/ {
        __pyx_t_12 = __pyx_v_ND;
        __pyx_t_13 = __pyx_t_12;
        for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
          __pyx_v_ii = __pyx_t_14;
+4642:                     dl0 = DLs[0,ii]
          __pyx_t_279 = 0;
          __pyx_t_280 = __pyx_v_ii;
          __pyx_v_dl0 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_279 * __pyx_v_DLs.strides[0]) )) + __pyx_t_280)) )));
 4643:                     # Compute the number of intervals to satisfy the resolution
+4644:                     N = <long>(Cceil((DLs[1,ii]-dl0)/dL[ii]))
          __pyx_t_281 = 1;
          __pyx_t_282 = __pyx_v_ii;
          __pyx_t_6 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_281 * __pyx_v_DLs.strides[0]) )) + __pyx_t_282)) ))) - __pyx_v_dl0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4644, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_dL, __pyx_v_ii, unsigned int, 0, __Pyx_PyInt_From_unsigned_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4644, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4644, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4644, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_v_N = ((long)ceil(__pyx_t_11));
+4645:                     N = 2**(<long>(Cceil(Clog2(<double>N))))
          __pyx_v_N = __Pyx_pow_long(2, ((long)ceil(log2(((double)__pyx_v_N)))));
+4646:                     dl = (DLs[1,ii]-dl0)/<double>N
          __pyx_t_283 = 1;
          __pyx_t_284 = __pyx_v_ii;
          __pyx_v_dl = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_DLs.data + __pyx_t_283 * __pyx_v_DLs.strides[0]) )) + __pyx_t_284)) ))) - __pyx_v_dl0) / ((double)__pyx_v_N));
+4647:                     D0, D1, D2 = Ds[0,ii], Ds[1,ii], Ds[2,ii]
          __pyx_t_285 = 0;
          __pyx_t_286 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_285 * __pyx_v_Ds.strides[0]) )) + __pyx_t_286)) )));
          __pyx_t_287 = 1;
          __pyx_t_288 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_287 * __pyx_v_Ds.strides[0]) )) + __pyx_t_288)) )));
          __pyx_t_289 = 2;
          __pyx_t_290 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_289 * __pyx_v_Ds.strides[0]) )) + __pyx_t_290)) )));
          __pyx_v_D0 = __pyx_t_11;
          __pyx_v_D1 = __pyx_t_23;
          __pyx_v_D2 = __pyx_t_26;
+4648:                     u0, u1, u2 = us[0,ii], us[1,ii], us[2,ii]
          __pyx_t_291 = 0;
          __pyx_t_292 = __pyx_v_ii;
          __pyx_t_26 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_291 * __pyx_v_us.strides[0]) )) + __pyx_t_292)) )));
          __pyx_t_293 = 1;
          __pyx_t_294 = __pyx_v_ii;
          __pyx_t_23 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_293 * __pyx_v_us.strides[0]) )) + __pyx_t_294)) )));
          __pyx_t_295 = 2;
          __pyx_t_296 = __pyx_v_ii;
          __pyx_t_11 = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_295 * __pyx_v_us.strides[0]) )) + __pyx_t_296)) )));
          __pyx_v_u0 = __pyx_t_26;
          __pyx_v_u1 = __pyx_t_23;
          __pyx_v_u2 = __pyx_t_11;
+4649:                     pts = np.empty((3,N+1),dtype=float)
          __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyInt_From_long((__pyx_v_N + 1)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_int_3);
          __Pyx_GIVEREF(__pyx_int_3);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_6);
          PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
          __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)(&PyFloat_Type))) < 0) __PYX_ERR(0, 4649, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4649, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4649, __pyx_L1_error)
          __pyx_t_33 = ((PyArrayObject *)__pyx_t_2);
          {
            __Pyx_BufFmt_StackElem __pyx_stack[1];
            __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_pts.rcbuffer->pybuffer);
            __pyx_t_34 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_t_33, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
            if (unlikely(__pyx_t_34 < 0)) {
              PyErr_Fetch(&__pyx_t_37, &__pyx_t_36, &__pyx_t_35);
              if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_pts.rcbuffer->pybuffer, (PyObject*)__pyx_v_pts, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
                Py_XDECREF(__pyx_t_37); Py_XDECREF(__pyx_t_36); Py_XDECREF(__pyx_t_35);
                __Pyx_RaiseBufferFallbackError();
              } else {
                PyErr_Restore(__pyx_t_37, __pyx_t_36, __pyx_t_35);
              }
              __pyx_t_37 = __pyx_t_36 = __pyx_t_35 = 0;
            }
            __pyx_pybuffernd_pts.diminfo[0].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_pts.diminfo[0].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_pts.diminfo[1].strides = __pyx_pybuffernd_pts.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_pts.diminfo[1].shape = __pyx_pybuffernd_pts.rcbuffer->pybuffer.shape[1];
            if (unlikely(__pyx_t_34 < 0)) __PYX_ERR(0, 4649, __pyx_L1_error)
          }
          __pyx_t_33 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pts, ((PyArrayObject *)__pyx_t_2));
          __pyx_t_2 = 0;
+4650:                     for jj in range(0,N+1):
          __pyx_t_47 = (__pyx_v_N + 1);
          __pyx_t_64 = __pyx_t_47;
          for (__pyx_t_38 = 0; __pyx_t_38 < __pyx_t_64; __pyx_t_38+=1) {
            __pyx_v_jj = __pyx_t_38;
+4651:                         kkk = dl0 + (<double>jj)*dl
            __pyx_v_kkk = (__pyx_v_dl0 + (((double)__pyx_v_jj) * __pyx_v_dl));
+4652:                         pts[0,jj] = D0 + kkk*u0
            __pyx_t_297 = 0;
            __pyx_t_298 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_297, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_298, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D0 + (__pyx_v_kkk * __pyx_v_u0));
+4653:                         pts[1,jj] = D1 + kkk*u1
            __pyx_t_299 = 1;
            __pyx_t_300 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_299, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_300, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D1 + (__pyx_v_kkk * __pyx_v_u1));
+4654:                         pts[2,jj] = D2 + kkk*u2
            __pyx_t_301 = 2;
            __pyx_t_302 = __pyx_v_jj;
            *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_pts.rcbuffer->pybuffer.buf, __pyx_t_301, __pyx_pybuffernd_pts.diminfo[0].strides, __pyx_t_302, __pyx_pybuffernd_pts.diminfo[1].strides) = (__pyx_v_D2 + (__pyx_v_kkk * __pyx_v_u2));
          }
+4655:                     if ani:
          __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_ani)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4655, __pyx_L1_error)
          if (__pyx_t_1) {
/* … */
          }
+4656:                         fkwdargs['Vect'] = (-u0,-u1,-u2)
            __pyx_t_2 = PyFloat_FromDouble((-__pyx_v_u0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4656, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_6 = PyFloat_FromDouble((-__pyx_v_u1)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4656, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_u2)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4656, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_4);
            __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4656, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_2);
            PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_6);
            PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_4);
            PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4);
            __pyx_t_2 = 0;
            __pyx_t_6 = 0;
            __pyx_t_4 = 0;
            if (unlikely(__pyx_v_fkwdargs == Py_None)) {
              PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
              __PYX_ERR(0, 4656, __pyx_L1_error)
            }
            if (unlikely(PyDict_SetItem(__pyx_v_fkwdargs, __pyx_n_s_Vect, __pyx_t_7) < 0)) __PYX_ERR(0, 4656, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+4657:                     sig[:,ii] = scpintg.romb(ff(pts,t=t,**fkwdargs),
          __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_scpintg); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_romb); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(((PyObject *)__pyx_v_pts));
          __Pyx_GIVEREF(((PyObject *)__pyx_v_pts));
          PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_pts));
          __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_t, __pyx_v_t) < 0) __PYX_ERR(0, 4657, __pyx_L1_error)
          __pyx_t_6 = __pyx_t_2;
          __pyx_t_2 = 0;
          if (unlikely(__pyx_v_fkwdargs == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
            __PYX_ERR(0, 4657, __pyx_L1_error)
          }
          if (__Pyx_MergeKeywords(__pyx_t_6, __pyx_v_fkwdargs) < 0) __PYX_ERR(0, 4657, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_ff, __pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
          __pyx_t_2 = 0;
/* … */
          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_INCREF(__pyx_slice__8);
          __Pyx_GIVEREF(__pyx_slice__8);
          PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sig), __pyx_t_6, __pyx_t_7) < 0)) __PYX_ERR(0, 4657, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        }
      }
      __pyx_L70:;
    }
    __pyx_L53:;
  }
  __pyx_L19:;
+4658:                                              dx=dl,axis=axm,show=False)
          __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4658, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyFloat_FromDouble(__pyx_v_dl); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4658, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dx, __pyx_t_7) < 0) __PYX_ERR(0, 4658, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_unsigned_int(__pyx_v_axm); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4658, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_t_7) < 0) __PYX_ERR(0, 4658, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_show, Py_False) < 0) __PYX_ERR(0, 4658, __pyx_L1_error)
 4659: 
+4660:     if nt==1:
  __pyx_t_1 = ((__pyx_v_nt == 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+4661:         return sig.ravel()
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_sig), __pyx_n_s_ravel); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_7 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_r = __pyx_t_7;
    __pyx_t_7 = 0;
    goto __pyx_L0;
 4662:     else:
+4663:         return sig
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(((PyObject *)__pyx_v_sig));
    __pyx_r = ((PyObject *)__pyx_v_sig);
    goto __pyx_L0;
  }
 4664: 
 4665: 
 4666: 
 4667: 
 4668: 
 4669: 
 4670: 
 4671: 
 4672: ######################################################################
 4673: #               Sinogram-specific
 4674: ######################################################################
 4675: 
 4676: 
+4677: def LOS_sino_findRootkPMin_Tor(double uParN, double uN, double Sca, double RZ0,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_59LOS_sino_findRootkPMin_Tor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_58LOS_sino_findRootkPMin_Tor[] = "\n    Rendre \"vectoriel\" sur LOS et sur les cercles (deux boucles \"for\")\n    Intersection ligne et cercle\n    double uParN : composante de u parallel au plan (x,y)\n        double uN : uz\n        double Sca : \077\077? produit scalaire ... ?\n        double RZ0 : Grand rayon du cercle\n        double RZ1 : Z\n        => cercle est centr\303\251 au point (0, 0, RZ1) et rayon RZ0\n        double ScaP : .... ?\n        double DParN : D origine de LOS.... ? N => norme de la composante du vecteur OD\n        double kOut : kmax o\303\271 on peut trouver un r\303\251sultat\n        double D0, double D1, double D2 : composantes de D (origine LOS)\n        double u0, double u1, double u2 : composantes de U (direction LOS)\n        str Mode='LOS' : si LOS pas de sol apr\303\250s kmax)\n    ::: Faire une fonction double mais qui renvoit QUE un tableau de bool avec true si\n    la distance est plus petite qu'un certain eps, false sinon.\n    TODO: ........... @LM\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_59LOS_sino_findRootkPMin_Tor = {"LOS_sino_findRootkPMin_Tor", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_59LOS_sino_findRootkPMin_Tor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_58LOS_sino_findRootkPMin_Tor};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_59LOS_sino_findRootkPMin_Tor(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  double __pyx_v_uParN;
  double __pyx_v_uN;
  double __pyx_v_Sca;
  double __pyx_v_RZ0;
  double __pyx_v_RZ1;
  double __pyx_v_ScaP;
  double __pyx_v_DParN;
  double __pyx_v_kOut;
  double __pyx_v_D0;
  double __pyx_v_D1;
  double __pyx_v_D2;
  double __pyx_v_u0;
  double __pyx_v_u1;
  double __pyx_v_u2;
  PyObject *__pyx_v_Mode = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino_findRootkPMin_Tor (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_uParN,&__pyx_n_s_uN,&__pyx_n_s_Sca,&__pyx_n_s_RZ0,&__pyx_n_s_RZ1,&__pyx_n_s_ScaP,&__pyx_n_s_DParN,&__pyx_n_s_kOut,&__pyx_n_s_D0,&__pyx_n_s_D1,&__pyx_n_s_D2,&__pyx_n_s_u0,&__pyx_n_s_u1,&__pyx_n_s_u2,&__pyx_n_s_Mode,0};
    PyObject* values[15] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[14] = ((PyObject*)__pyx_n_s_LOS);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uParN)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uN)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 1); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Sca)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 2); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RZ0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 3); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RZ1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 4); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ScaP)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 5); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_DParN)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 6); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kOut)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 7); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 8); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 9); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (likely((values[10] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 10); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (likely((values[11] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u0)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 11); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (likely((values[12] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u1)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 12); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (likely((values[13] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u2)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, 13); __PYX_ERR(0, 4677, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Mode);
          if (value) { values[14] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_sino_findRootkPMin_Tor") < 0)) __PYX_ERR(0, 4677, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_uParN = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_uParN == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4677, __pyx_L3_error)
    __pyx_v_uN = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_uN == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4677, __pyx_L3_error)
    __pyx_v_Sca = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_Sca == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4677, __pyx_L3_error)
    __pyx_v_RZ0 = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_RZ0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4677, __pyx_L3_error)
    __pyx_v_RZ1 = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_RZ1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4678, __pyx_L3_error)
    __pyx_v_ScaP = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_ScaP == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4678, __pyx_L3_error)
    __pyx_v_DParN = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_DParN == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4678, __pyx_L3_error)
    __pyx_v_kOut = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_kOut == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4679, __pyx_L3_error)
    __pyx_v_D0 = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_D0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4679, __pyx_L3_error)
    __pyx_v_D1 = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_D1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4679, __pyx_L3_error)
    __pyx_v_D2 = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_D2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4679, __pyx_L3_error)
    __pyx_v_u0 = __pyx_PyFloat_AsDouble(values[11]); if (unlikely((__pyx_v_u0 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4680, __pyx_L3_error)
    __pyx_v_u1 = __pyx_PyFloat_AsDouble(values[12]); if (unlikely((__pyx_v_u1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4680, __pyx_L3_error)
    __pyx_v_u2 = __pyx_PyFloat_AsDouble(values[13]); if (unlikely((__pyx_v_u2 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4680, __pyx_L3_error)
    __pyx_v_Mode = ((PyObject*)values[14]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_sino_findRootkPMin_Tor", 0, 14, 15, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4677, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino_findRootkPMin_Tor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Mode), (&PyString_Type), 1, "Mode", 1))) __PYX_ERR(0, 4680, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_58LOS_sino_findRootkPMin_Tor(__pyx_self, __pyx_v_uParN, __pyx_v_uN, __pyx_v_Sca, __pyx_v_RZ0, __pyx_v_RZ1, __pyx_v_ScaP, __pyx_v_DParN, __pyx_v_kOut, __pyx_v_D0, __pyx_v_D1, __pyx_v_D2, __pyx_v_u0, __pyx_v_u1, __pyx_v_u2, __pyx_v_Mode);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_58LOS_sino_findRootkPMin_Tor(CYTHON_UNUSED PyObject *__pyx_self, double __pyx_v_uParN, double __pyx_v_uN, double __pyx_v_Sca, double __pyx_v_RZ0, double __pyx_v_RZ1, double __pyx_v_ScaP, double __pyx_v_DParN, double __pyx_v_kOut, double __pyx_v_D0, double __pyx_v_D1, double __pyx_v_D2, double __pyx_v_u0, double __pyx_v_u1, double __pyx_v_u2, PyObject *__pyx_v_Mode) {
  double __pyx_v_a4;
  double __pyx_v_a3;
  double __pyx_v_a2;
  double __pyx_v_a1;
  double __pyx_v_a0;
  PyArrayObject *__pyx_v_roo = 0;
  PyObject *__pyx_v_KK = 0;
  PyObject *__pyx_v_Pk = 0;
  PyObject *__pyx_v_Pk2D = 0;
  PyObject *__pyx_v_rk = 0;
  double __pyx_v_kk;
  double __pyx_v_kPMin;
  PyObject *__pyx_v_pp = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino_findRootkPMin_Tor", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino_findRootkPMin_Tor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_roo);
  __Pyx_XDECREF(__pyx_v_KK);
  __Pyx_XDECREF(__pyx_v_Pk);
  __Pyx_XDECREF(__pyx_v_Pk2D);
  __Pyx_XDECREF(__pyx_v_rk);
  __Pyx_XDECREF(__pyx_v_pp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__216 = PyTuple_Pack(28, __pyx_n_s_uParN, __pyx_n_s_uN, __pyx_n_s_Sca, __pyx_n_s_RZ0, __pyx_n_s_RZ1, __pyx_n_s_ScaP, __pyx_n_s_DParN, __pyx_n_s_kOut, __pyx_n_s_D0, __pyx_n_s_D1, __pyx_n_s_D2, __pyx_n_s_u0, __pyx_n_s_u1, __pyx_n_s_u2, __pyx_n_s_Mode, __pyx_n_s_a4, __pyx_n_s_a3, __pyx_n_s_a2, __pyx_n_s_a1, __pyx_n_s_a0, __pyx_n_s_roo, __pyx_n_s_KK, __pyx_n_s_Pk, __pyx_n_s_Pk2D, __pyx_n_s_rk, __pyx_n_s_kk, __pyx_n_s_kPMin, __pyx_n_s_pp); if (unlikely(!__pyx_tuple__216)) __PYX_ERR(0, 4677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__216);
  __Pyx_GIVEREF(__pyx_tuple__216);
/* … */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_59LOS_sino_findRootkPMin_Tor, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_sino_findRootkPMin_Tor, __pyx_t_1) < 0) __PYX_ERR(0, 4677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_codeobj__217 = (PyObject*)__Pyx_PyCode_New(15, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__216, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_sino_findRootkPMin_Tor, 4677, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__217)) __PYX_ERR(0, 4677, __pyx_L1_error)
 4678:                                 double RZ1, double ScaP, double DParN,
 4679:                                 double kOut, double D0, double D1, double D2,
 4680:                                 double u0, double u1, double u2, str Mode='LOS'):
 4681:     """
 4682:     Rendre "vectoriel" sur LOS et sur les cercles (deux boucles "for")
 4683:     Intersection ligne et cercle
 4684:     double uParN : composante de u parallel au plan (x,y)
 4685:         double uN : uz
 4686:         double Sca : ??? produit scalaire ... ?
 4687:         double RZ0 : Grand rayon du cercle
 4688:         double RZ1 : Z
 4689:         => cercle est centré au point (0, 0, RZ1) et rayon RZ0
 4690:         double ScaP : .... ?
 4691:         double DParN : D origine de LOS.... ? N => norme de la composante du vecteur OD
 4692:         double kOut : kmax où on peut trouver un résultat
 4693:         double D0, double D1, double D2 : composantes de D (origine LOS)
 4694:         double u0, double u1, double u2 : composantes de U (direction LOS)
 4695:         str Mode='LOS' : si LOS pas de sol après kmax)
 4696:     ::: Faire une fonction double mais qui renvoit QUE un tableau de bool avec true si
 4697:     la distance est plus petite qu'un certain eps, false sinon.
 4698:     TODO: ........... @LM
 4699:     """
+4700:     cdef double a4 = (uParN*uN*uN)**2, a3 = 2*( (Sca-RZ1*u2)*(uParN*uN)**2 + ScaP*uN**4 )
  __pyx_v_a4 = pow(((__pyx_v_uParN * __pyx_v_uN) * __pyx_v_uN), 2.0);
  __pyx_v_a3 = (2.0 * (((__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2)) * pow((__pyx_v_uParN * __pyx_v_uN), 2.0)) + (__pyx_v_ScaP * pow(__pyx_v_uN, 4.0))));
+4701:     cdef double a2 = (uParN*(Sca-RZ1*u2))**2 + 4.*ScaP*(Sca-RZ1*u2)*uN**2 + (DParN*uN*uN)**2 - (RZ0*uParN*uParN)**2
  __pyx_v_a2 = (((pow((__pyx_v_uParN * (__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2))), 2.0) + (((4. * __pyx_v_ScaP) * (__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2))) * pow(__pyx_v_uN, 2.0))) + pow(((__pyx_v_DParN * __pyx_v_uN) * __pyx_v_uN), 2.0)) - pow(((__pyx_v_RZ0 * __pyx_v_uParN) * __pyx_v_uParN), 2.0));
+4702:     cdef double a1 = 2*( ScaP*(Sca-RZ1*u2)**2 + (Sca-RZ1*u2)*(DParN*uN)**2 - ScaP*(RZ0*uParN)**2 )
  __pyx_v_a1 = (2.0 * (((__pyx_v_ScaP * pow((__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2)), 2.0)) + ((__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2)) * pow((__pyx_v_DParN * __pyx_v_uN), 2.0))) - (__pyx_v_ScaP * pow((__pyx_v_RZ0 * __pyx_v_uParN), 2.0))));
+4703:     cdef double a0 = ((Sca-RZ1*u2)*DParN)**2 - (RZ0*ScaP)**2
  __pyx_v_a0 = (pow(((__pyx_v_Sca - (__pyx_v_RZ1 * __pyx_v_u2)) * __pyx_v_DParN), 2.0) - pow((__pyx_v_RZ0 * __pyx_v_ScaP), 2.0));
+4704:     cdef np.ndarray roo = np.roots(np.array([a4,a3,a2,a1,a0]))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_roots); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_a4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_a3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_a2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_a1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_a0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = PyList_New(5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_4);
  PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyList_SET_ITEM(__pyx_t_10, 2, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyList_SET_ITEM(__pyx_t_10, 3, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_9);
  PyList_SET_ITEM(__pyx_t_10, 4, __pyx_t_9);
  __pyx_t_4 = 0;
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_9, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4704, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4704, __pyx_L1_error)
  __pyx_v_roo = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4705:     cdef list KK = list(np.real(roo[np.isreal(roo)]))   # There might be several solutions
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_real); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_isreal); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_5, ((PyObject *)__pyx_v_roo)) : __Pyx_PyObject_CallOneArg(__pyx_t_10, ((PyObject *)__pyx_v_roo));
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_roo), __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PySequence_List(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4705, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_KK = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 4706:     cdef list Pk, Pk2D, rk
 4707:     cdef double kk, kPMin
+4708:     if Mode=='LOS':                     # Take solution on physical LOS
  __pyx_t_11 = (__Pyx_PyString_Equals(__pyx_v_Mode, __pyx_n_s_LOS, Py_EQ)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 4708, __pyx_L1_error)
  __pyx_t_12 = (__pyx_t_11 != 0);
  if (__pyx_t_12) {
/* … */
    goto __pyx_L3;
  }
+4709:         if any([kk>=0 and kk<=kOut for kk in KK]):
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_v_KK; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_10); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4709, __pyx_L1_error)
      #else
      __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      #endif
      __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4709, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_v_kk = __pyx_t_14;
      __pyx_t_12 = (__pyx_v_kk >= 0.0);
      if (__pyx_t_12) {
      } else {
        __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4709, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_10 = __pyx_t_3;
        __pyx_t_3 = 0;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_12 = (__pyx_v_kk <= __pyx_v_kOut);
      __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4709, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = __pyx_t_3;
      __pyx_t_3 = 0;
      __pyx_L7_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4709, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_any, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4709, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 4709, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_12) {
/* … */
      goto __pyx_L4;
    }
+4710:             KK = [kk for kk in KK if kk>=0 and kk<=kOut]
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4710, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_KK; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_10 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_10); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4710, __pyx_L1_error)
        #else
        __pyx_t_10 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4710, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        #endif
        __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4710, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_v_kk = __pyx_t_14;
        __pyx_t_11 = ((__pyx_v_kk >= 0.0) != 0);
        if (__pyx_t_11) {
        } else {
          __pyx_t_12 = __pyx_t_11;
          goto __pyx_L12_bool_binop_done;
        }
        __pyx_t_11 = ((__pyx_v_kk <= __pyx_v_kOut) != 0);
        __pyx_t_12 = __pyx_t_11;
        __pyx_L12_bool_binop_done:;
        if (__pyx_t_12) {
          __pyx_t_10 = PyFloat_FromDouble(__pyx_v_kk); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4710, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_10);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4710, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_KK, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
+4711:             Pk = [(D0+kk*u0,D1+kk*u1,D2+kk*u2) for kk in KK]
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4711, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_KK; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_10 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_10); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4711, __pyx_L1_error)
        #else
        __pyx_t_10 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        #endif
        __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_v_kk = __pyx_t_14;
        __pyx_t_10 = PyFloat_FromDouble((__pyx_v_D0 + (__pyx_v_kk * __pyx_v_u0))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_3 = PyFloat_FromDouble((__pyx_v_D1 + (__pyx_v_kk * __pyx_v_u1))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = PyFloat_FromDouble((__pyx_v_D2 + (__pyx_v_kk * __pyx_v_u2))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_5);
        __pyx_t_10 = 0;
        __pyx_t_3 = 0;
        __pyx_t_5 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 4711, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_Pk = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+4712:             Pk2D = [(Csqrt(pp[0]**2+pp[1]**2), pp[2]) for pp in Pk]
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4712, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_Pk; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_9 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4712, __pyx_L1_error)
        #else
        __pyx_t_9 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_9);
        __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyNumber_Add(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = PyFloat_FromDouble(sqrt(__pyx_t_14)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
        __pyx_t_9 = 0;
        __pyx_t_3 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(0, 4712, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_Pk2D = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+4713:             rk = [(pp[0]-RZ0)**2+(pp[1]-RZ1)**2 for pp in Pk2D]
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4713, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_Pk2D; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_5); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4713, __pyx_L1_error)
        #else
        __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_pp, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_3 = PyFloat_FromDouble(__pyx_v_RZ0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_9 = PyNumber_Subtract(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = PyFloat_FromDouble(__pyx_v_RZ1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_10 = PyNumber_Subtract(__pyx_t_9, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Power(__pyx_t_10, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4713, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_rk = ((PyObject*)__pyx_t_1);
      __pyx_t_1 = 0;
+4714:             kPMin = KK[rk.index(min(rk))]
      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_v_rk); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_index, __pyx_v_rk, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_KK, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4714, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4714, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_kPMin = __pyx_t_14;
 4715:         else:
+4716:             kPMin = min([Cabs(kk) for kk in KK])  # Else, take the one closest to D
    /*else*/ {
      __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4716, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __pyx_v_KK; __Pyx_INCREF(__pyx_t_2); __pyx_t_13 = 0;
      for (;;) {
        if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_2)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_10 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_13); __Pyx_INCREF(__pyx_t_10); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4716, __pyx_L1_error)
        #else
        __pyx_t_10 = PySequence_ITEM(__pyx_t_2, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        #endif
        __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4716, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_v_kk = __pyx_t_14;
        __pyx_t_10 = PyFloat_FromDouble(fabs(__pyx_v_kk)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4716, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4716, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4716, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4716, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_kPMin = __pyx_t_14;
    }
    __pyx_L4:;
 4717:     else:
+4718:         Pk = [(D0+kk*u0,D1+kk*u1,D2+kk*u2) for kk in KK]
  /*else*/ {
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4718, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_v_KK; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_10 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_10); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4718, __pyx_L1_error)
      #else
      __pyx_t_10 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      #endif
      __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_10); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_v_kk = __pyx_t_14;
      __pyx_t_10 = PyFloat_FromDouble((__pyx_v_D0 + (__pyx_v_kk * __pyx_v_u0))); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_5 = PyFloat_FromDouble((__pyx_v_D1 + (__pyx_v_kk * __pyx_v_u1))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyFloat_FromDouble((__pyx_v_D2 + (__pyx_v_kk * __pyx_v_u2))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_3);
      __pyx_t_10 = 0;
      __pyx_t_5 = 0;
      __pyx_t_3 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_9))) __PYX_ERR(0, 4718, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_Pk = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+4719:         Pk2D = [(Csqrt(pp[0]**2+pp[1]**2), pp[2]) for pp in Pk]
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_v_Pk; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_9 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4719, __pyx_L1_error)
      #else
      __pyx_t_9 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_9);
      __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_9); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = PyFloat_FromDouble(sqrt(__pyx_t_14)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_pp, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
      __pyx_t_9 = 0;
      __pyx_t_5 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 4719, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_Pk2D = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+4720:         rk = [(pp[0]-RZ0)**2+(pp[1]-RZ1)**2 for pp in Pk2D]
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4720, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_v_Pk2D; __Pyx_INCREF(__pyx_t_1); __pyx_t_13 = 0;
    for (;;) {
      if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_1)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_13); __Pyx_INCREF(__pyx_t_3); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 4720, __pyx_L1_error)
      #else
      __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_3);
      __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_pp, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_5 = PyFloat_FromDouble(__pyx_v_RZ0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_9 = PyNumber_Subtract(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = PyNumber_Power(__pyx_t_9, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_pp, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = PyFloat_FromDouble(__pyx_v_RZ1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = PyNumber_Subtract(__pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyNumber_Power(__pyx_t_10, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = PyNumber_Add(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_10))) __PYX_ERR(0, 4720, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_rk = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
+4721:         kPMin = KK[rk.index(min(rk))]
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_min, __pyx_v_rk); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyList_Type_index, __pyx_v_rk, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_KK, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4721, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_kPMin = __pyx_t_14;
  }
  __pyx_L3:;
+4722:     return kPMin # + distance au cercle
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_kPMin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4723: 
 4724: 
 4725: 
+4726: cdef LOS_sino_Tor(double D0, double D1, double D2, double u0, double u1,
static PyObject *__pyx_f_4tofu_4geom_5_GG03_LOS_sino_Tor(double __pyx_v_D0, double __pyx_v_D1, double __pyx_v_D2, double __pyx_v_u0, double __pyx_v_u1, double __pyx_v_u2, double __pyx_v_RZ0, double __pyx_v_RZ1, struct __pyx_opt_args_4tofu_4geom_5_GG03_LOS_sino_Tor *__pyx_optional_args) {
  PyObject *__pyx_v_Mode = ((PyObject*)__pyx_n_s_LOS);
  double __pyx_v_kOut = __pyx_k__87;
  double __pyx_v_uN;
  double __pyx_v_uParN;
  double __pyx_v_DParN;
  double __pyx_v_Sca;
  double __pyx_v_ScaP;
  double __pyx_v_kPMin;
  double __pyx_v_PMin0;
  double __pyx_v_PMin1;
  double __pyx_v_PMin2;
  double __pyx_v_PMin2norm;
  double __pyx_v_PMin2D0;
  double __pyx_v_PMin2D1;
  double __pyx_v_RMin;
  double __pyx_v_eTheta0;
  double __pyx_v_eTheta1;
  double __pyx_v_eTheta2;
  double __pyx_v_vP0;
  double __pyx_v_vP1;
  double __pyx_v_Theta;
  double __pyx_v_ImpTheta;
  double __pyx_v_er2D0;
  double __pyx_v_er2D1;
  double __pyx_v_p;
  double __pyx_v_uN0;
  double __pyx_v_uN1;
  double __pyx_v_uN2;
  double __pyx_v_phi;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino_Tor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_Mode = __pyx_optional_args->Mode;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_kOut = __pyx_optional_args->kOut;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino_Tor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_LOS_sino_Tor {
  int __pyx_n;
  PyObject *Mode;
  double kOut;
};
+4727:                   double u2, double RZ0, double RZ1, str Mode='LOS', double kOut=np.inf):
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4727, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k__87 = __pyx_t_6;
 4728: 
+4729:     cdef double    uN = Csqrt(u0**2+u1**2+u2**2), uParN = Csqrt(u0**2+u1**2), DParN = Csqrt(D0**2+D1**2)
  __pyx_v_uN = sqrt(((pow(__pyx_v_u0, 2.0) + pow(__pyx_v_u1, 2.0)) + pow(__pyx_v_u2, 2.0)));
  __pyx_v_uParN = sqrt((pow(__pyx_v_u0, 2.0) + pow(__pyx_v_u1, 2.0)));
  __pyx_v_DParN = sqrt((pow(__pyx_v_D0, 2.0) + pow(__pyx_v_D1, 2.0)));
+4730:     cdef double    Sca = u0*D0+u1*D1+u2*D2, ScaP = u0*D0+u1*D1
  __pyx_v_Sca = (((__pyx_v_u0 * __pyx_v_D0) + (__pyx_v_u1 * __pyx_v_D1)) + (__pyx_v_u2 * __pyx_v_D2));
  __pyx_v_ScaP = ((__pyx_v_u0 * __pyx_v_D0) + (__pyx_v_u1 * __pyx_v_D1));
 4731:     cdef double    kPMin
+4732:     if uParN == 0.:
  __pyx_t_1 = ((__pyx_v_uParN == 0.) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4733:         kPMin = (RZ1-D2)/u2
    __pyx_v_kPMin = ((__pyx_v_RZ1 - __pyx_v_D2) / __pyx_v_u2);
 4734:     else:
+4735:         kPMin = LOS_sino_findRootkPMin_Tor(uParN, uN, Sca, RZ0, RZ1, ScaP, DParN, kOut, D0, D1, D2, u0, u1, u2, Mode=Mode)
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LOS_sino_findRootkPMin_Tor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyFloat_FromDouble(__pyx_v_uParN); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_uN); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_Sca); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyFloat_FromDouble(__pyx_v_RZ0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_RZ1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyFloat_FromDouble(__pyx_v_ScaP); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = PyFloat_FromDouble(__pyx_v_DParN); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = PyFloat_FromDouble(__pyx_v_kOut); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = PyFloat_FromDouble(__pyx_v_D0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __pyx_t_12 = PyFloat_FromDouble(__pyx_v_D1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = PyFloat_FromDouble(__pyx_v_D2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = PyFloat_FromDouble(__pyx_v_u0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_15 = PyFloat_FromDouble(__pyx_v_u1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_16 = PyFloat_FromDouble(__pyx_v_u2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_t_17 = PyTuple_New(14); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_17, 3, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_7);
    PyTuple_SET_ITEM(__pyx_t_17, 4, __pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_17, 5, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_9);
    PyTuple_SET_ITEM(__pyx_t_17, 6, __pyx_t_9);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_17, 7, __pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_17, 8, __pyx_t_11);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_17, 9, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_17, 10, __pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_17, 11, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_17, 12, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_16);
    PyTuple_SET_ITEM(__pyx_t_17, 13, __pyx_t_16);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_6 = 0;
    __pyx_t_7 = 0;
    __pyx_t_8 = 0;
    __pyx_t_9 = 0;
    __pyx_t_10 = 0;
    __pyx_t_11 = 0;
    __pyx_t_12 = 0;
    __pyx_t_13 = 0;
    __pyx_t_14 = 0;
    __pyx_t_15 = 0;
    __pyx_t_16 = 0;
    __pyx_t_16 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    if (PyDict_SetItem(__pyx_t_16, __pyx_n_s_Mode, __pyx_v_Mode) < 0) __PYX_ERR(0, 4735, __pyx_L1_error)
    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_17, __pyx_t_16); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_18 = __pyx_PyFloat_AsDouble(__pyx_t_15); if (unlikely((__pyx_t_18 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4735, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_v_kPMin = __pyx_t_18;
  }
  __pyx_L3:;
+4736:     cdef double    PMin0 = D0+kPMin*u0, PMin1 = D1+kPMin*u1, PMin2 = D2+kPMin*u2
  __pyx_v_PMin0 = (__pyx_v_D0 + (__pyx_v_kPMin * __pyx_v_u0));
  __pyx_v_PMin1 = (__pyx_v_D1 + (__pyx_v_kPMin * __pyx_v_u1));
  __pyx_v_PMin2 = (__pyx_v_D2 + (__pyx_v_kPMin * __pyx_v_u2));
+4737:     cdef double    PMin2norm = Csqrt(PMin0**2+PMin1**2)
  __pyx_v_PMin2norm = sqrt((pow(__pyx_v_PMin0, 2.0) + pow(__pyx_v_PMin1, 2.0)));
+4738:     cdef double    PMin2D0 = PMin2norm, PMin2D1 = PMin2
  __pyx_v_PMin2D0 = __pyx_v_PMin2norm;
  __pyx_v_PMin2D1 = __pyx_v_PMin2;
+4739:     cdef double    RMin = Csqrt((PMin2D0-RZ0)**2+(PMin2D1-RZ1)**2)
  __pyx_v_RMin = sqrt((pow((__pyx_v_PMin2D0 - __pyx_v_RZ0), 2.0) + pow((__pyx_v_PMin2D1 - __pyx_v_RZ1), 2.0)));
+4740:     cdef double    eTheta0 = -PMin1/PMin2norm, eTheta1 = PMin0/PMin2norm, eTheta2 = 0.
  __pyx_v_eTheta0 = ((-__pyx_v_PMin1) / __pyx_v_PMin2norm);
  __pyx_v_eTheta1 = (__pyx_v_PMin0 / __pyx_v_PMin2norm);
  __pyx_v_eTheta2 = 0.;
+4741:     cdef double    vP0 = PMin2D0-RZ0, vP1 = PMin2D1-RZ1
  __pyx_v_vP0 = (__pyx_v_PMin2D0 - __pyx_v_RZ0);
  __pyx_v_vP1 = (__pyx_v_PMin2D1 - __pyx_v_RZ1);
+4742:     cdef double    Theta = Catan2(vP1,vP0)
  __pyx_v_Theta = atan2(__pyx_v_vP1, __pyx_v_vP0);
+4743:     cdef double    ImpTheta = Theta if Theta>=0 else Theta + np.pi
  if (((__pyx_v_Theta >= 0.0) != 0)) {
    __pyx_t_18 = __pyx_v_Theta;
  } else {
    __pyx_t_15 = PyFloat_FromDouble(__pyx_v_Theta); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_n_s_np); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_pi); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_16 = PyNumber_Add(__pyx_t_15, __pyx_t_17); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4743, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
    __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_16); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4743, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
    __pyx_t_18 = __pyx_t_19;
  }
  __pyx_v_ImpTheta = __pyx_t_18;
+4744:     cdef double    er2D0 = Ccos(ImpTheta), er2D1 = Csin(ImpTheta)
  __pyx_v_er2D0 = cos(__pyx_v_ImpTheta);
  __pyx_v_er2D1 = sin(__pyx_v_ImpTheta);
+4745:     cdef double    p = vP0*er2D0 + vP1*er2D1
  __pyx_v_p = ((__pyx_v_vP0 * __pyx_v_er2D0) + (__pyx_v_vP1 * __pyx_v_er2D1));
+4746:     cdef double    uN0 = u0/uN, uN1 = u1/uN, uN2 = u2/uN
  __pyx_v_uN0 = (__pyx_v_u0 / __pyx_v_uN);
  __pyx_v_uN1 = (__pyx_v_u1 / __pyx_v_uN);
  __pyx_v_uN2 = (__pyx_v_u2 / __pyx_v_uN);
+4747:     cdef double    phi = Casin(-uN0*eTheta0 -uN1*eTheta1 -uN2*eTheta2)
  __pyx_v_phi = asin(((((-__pyx_v_uN0) * __pyx_v_eTheta0) - (__pyx_v_uN1 * __pyx_v_eTheta1)) - (__pyx_v_uN2 * __pyx_v_eTheta2)));
+4748:     return (PMin0,PMin1,PMin2), kPMin, RMin, Theta, p, ImpTheta, phi
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_16 = PyFloat_FromDouble(__pyx_v_PMin0); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_17 = PyFloat_FromDouble(__pyx_v_PMin1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_15 = PyFloat_FromDouble(__pyx_v_PMin2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_15);
  __pyx_t_16 = 0;
  __pyx_t_17 = 0;
  __pyx_t_15 = 0;
  __pyx_t_15 = PyFloat_FromDouble(__pyx_v_kPMin); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_17 = PyFloat_FromDouble(__pyx_v_RMin); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_17);
  __pyx_t_16 = PyFloat_FromDouble(__pyx_v_Theta); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __pyx_t_14 = PyFloat_FromDouble(__pyx_v_p); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_13 = PyFloat_FromDouble(__pyx_v_ImpTheta); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_12 = PyFloat_FromDouble(__pyx_v_phi); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_11 = PyTuple_New(7); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_17);
  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_17);
  __Pyx_GIVEREF(__pyx_t_16);
  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_14);
  PyTuple_SET_ITEM(__pyx_t_11, 4, __pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_11, 5, __pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_11, 6, __pyx_t_12);
  __pyx_t_2 = 0;
  __pyx_t_15 = 0;
  __pyx_t_17 = 0;
  __pyx_t_16 = 0;
  __pyx_t_14 = 0;
  __pyx_t_13 = 0;
  __pyx_t_12 = 0;
  __pyx_r = __pyx_t_11;
  __pyx_t_11 = 0;
  goto __pyx_L0;
 4749: 
 4750: 
 4751: 
+4752: cdef inline void NEW_LOS_sino_Tor(double orig0, double orig1, double orig2,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_NEW_LOS_sino_Tor(double __pyx_v_orig0, double __pyx_v_orig1, double __pyx_v_orig2, double __pyx_v_dirv0, double __pyx_v_dirv1, double __pyx_v_dirv2, double __pyx_v_circ_radius, double __pyx_v_circ_normz, double *__pyx_v_results, struct __pyx_opt_args_4tofu_4geom_5_GG03_NEW_LOS_sino_Tor *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("tofu.geom._GG03.NEW_LOS_sino_Tor", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_NEW_LOS_sino_Tor {
  int __pyx_n;
  int is_LOS_Mode;
  double kOut;
};
 4753:                                   double dirv0, double dirv1, double dirv2,
 4754:                                   double circ_radius, double circ_normz,
 4755:                                   double[9] results,
+4756:                                   bint is_LOS_Mode=False,
  int __pyx_v_is_LOS_Mode = ((int)0);
  double __pyx_v_kOut = __pyx_k__88;
  double __pyx_v_dirv[3];
  double __pyx_v_orig[3];
  double __pyx_v_res[2];
  double __pyx_v_normu;
  double __pyx_v_normu_sqr;
  double __pyx_v_kPMin;
  double __pyx_v_PMin0;
  double __pyx_v_PMin1;
  double __pyx_v_PMin2;
  double __pyx_v_PMin2norm;
  double __pyx_v_RMin;
  double __pyx_v_vP0;
  double __pyx_v_vP1;
  double __pyx_v_Theta;
  double __pyx_v_ImpTheta;
  double __pyx_v_er2D0;
  double __pyx_v_er2D1;
  double __pyx_v_p0;
  double __pyx_v_eTheta0;
  double __pyx_v_eTheta1;
  double __pyx_v_normu0;
  double __pyx_v_normu1;
  double __pyx_v_phi;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("NEW_LOS_sino_Tor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_is_LOS_Mode = __pyx_optional_args->is_LOS_Mode;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_kOut = __pyx_optional_args->kOut;
      }
    }
  }
+4757:                                   double kOut=np.inf) :
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_inf); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4757, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_k__88 = __pyx_t_6;
 4758:     cdef double[3] dirv, orig
 4759:     cdef double[2] res
 4760:     cdef double normu, normu_sqr
 4761:     cdef double kPMin
 4762: 
+4763:     normu_sqr = dirv0 * dirv0 + dirv1 * dirv1 + dirv2 * dirv2
  __pyx_v_normu_sqr = (((__pyx_v_dirv0 * __pyx_v_dirv0) + (__pyx_v_dirv1 * __pyx_v_dirv1)) + (__pyx_v_dirv2 * __pyx_v_dirv2));
+4764:     normu = Csqrt(normu_sqr)
  __pyx_v_normu = sqrt(__pyx_v_normu_sqr);
+4765:     dirv[0] = dirv0
  (__pyx_v_dirv[0]) = __pyx_v_dirv0;
+4766:     dirv[2] = dirv2
  (__pyx_v_dirv[2]) = __pyx_v_dirv2;
+4767:     dirv[1] = dirv1
  (__pyx_v_dirv[1]) = __pyx_v_dirv1;
+4768:     orig[0] = orig0
  (__pyx_v_orig[0]) = __pyx_v_orig0;
+4769:     orig[1] = orig1
  (__pyx_v_orig[1]) = __pyx_v_orig1;
+4770:     orig[2] = orig2
  (__pyx_v_orig[2]) = __pyx_v_orig2;
 4771: 
+4772:     if dirv0 == 0. and dirv1 == 0.:
  __pyx_t_2 = ((__pyx_v_dirv0 == 0.) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_dirv1 == 0.) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4773:         kPMin = (circ_normz-orig2)/dirv2
    __pyx_v_kPMin = ((__pyx_v_circ_normz - __pyx_v_orig2) / __pyx_v_dirv2);
 4774:     else:
+4775:         dist_los_circle_core(dirv, orig,
  /*else*/ {
/* … */
    __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_dirv, __pyx_v_orig, __pyx_v_circ_radius, __pyx_v_circ_normz, __pyx_v_normu_sqr, __pyx_v_res);
 4776:                              circ_radius, circ_normz,
 4777:                              normu_sqr, res)
+4778:         kPMin = res[0]
    __pyx_v_kPMin = (__pyx_v_res[0]);
+4779:         if is_LOS_Mode and kPMin > kOut:
    __pyx_t_2 = (__pyx_v_is_LOS_Mode != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_kPMin > __pyx_v_kOut) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L7_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
  }
  __pyx_L3:;
+4780:             kPMin = kOut
      __pyx_v_kPMin = __pyx_v_kOut;
 4781: 
 4782:     # Computing the point's coordinates.........................................
+4783:     cdef double PMin0 = orig0 + kPMin * dirv0
  __pyx_v_PMin0 = (__pyx_v_orig0 + (__pyx_v_kPMin * __pyx_v_dirv0));
+4784:     cdef double PMin1 = orig1 + kPMin * dirv1
  __pyx_v_PMin1 = (__pyx_v_orig1 + (__pyx_v_kPMin * __pyx_v_dirv1));
+4785:     cdef double PMin2 = orig2 + kPMin * dirv2
  __pyx_v_PMin2 = (__pyx_v_orig2 + (__pyx_v_kPMin * __pyx_v_dirv2));
+4786:     cdef double PMin2norm = Csqrt(PMin0**2+PMin1**2)
  __pyx_v_PMin2norm = sqrt((pow(__pyx_v_PMin0, 2.0) + pow(__pyx_v_PMin1, 2.0)));
+4787:     cdef double RMin = Csqrt((PMin2norm - circ_radius)**2
  __pyx_v_RMin = sqrt((pow((__pyx_v_PMin2norm - __pyx_v_circ_radius), 2.0) + pow((__pyx_v_PMin2 - __pyx_v_circ_normz), 2.0)));
 4788:                              + (PMin2   - circ_normz)**2)
+4789:     cdef double vP0 = PMin2norm - circ_radius
  __pyx_v_vP0 = (__pyx_v_PMin2norm - __pyx_v_circ_radius);
+4790:     cdef double vP1 = PMin2     - circ_normz
  __pyx_v_vP1 = (__pyx_v_PMin2 - __pyx_v_circ_normz);
+4791:     cdef double Theta = Catan2(vP1, vP0)
  __pyx_v_Theta = atan2(__pyx_v_vP1, __pyx_v_vP0);
+4792:     cdef double ImpTheta = Theta if Theta>=0 else Theta + np.pi
  if (((__pyx_v_Theta >= 0.0) != 0)) {
    __pyx_t_3 = __pyx_v_Theta;
  } else {
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_Theta); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_pi); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_7 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4792, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_3 = __pyx_t_7;
  }
  __pyx_v_ImpTheta = __pyx_t_3;
+4793:     cdef double er2D0 = Ccos(ImpTheta)
  __pyx_v_er2D0 = cos(__pyx_v_ImpTheta);
+4794:     cdef double er2D1 = Csin(ImpTheta)
  __pyx_v_er2D1 = sin(__pyx_v_ImpTheta);
+4795:     cdef double p0 = vP0*er2D0 + vP1*er2D1
  __pyx_v_p0 = ((__pyx_v_vP0 * __pyx_v_er2D0) + (__pyx_v_vP1 * __pyx_v_er2D1));
+4796:     cdef double eTheta0 = -PMin1 / PMin2norm
  __pyx_v_eTheta0 = ((-__pyx_v_PMin1) / __pyx_v_PMin2norm);
+4797:     cdef double eTheta1 =  PMin0 / PMin2norm
  __pyx_v_eTheta1 = (__pyx_v_PMin0 / __pyx_v_PMin2norm);
+4798:     cdef double normu0 = dirv0/normu
  __pyx_v_normu0 = (__pyx_v_dirv0 / __pyx_v_normu);
+4799:     cdef double normu1 = dirv1/normu
  __pyx_v_normu1 = (__pyx_v_dirv1 / __pyx_v_normu);
+4800:     cdef double phi = Casin(-normu0 * eTheta0 - normu1 * eTheta1)
  __pyx_v_phi = asin((((-__pyx_v_normu0) * __pyx_v_eTheta0) - (__pyx_v_normu1 * __pyx_v_eTheta1)));
 4801:     # Filling the results ......................................................
+4802:     results[0] = PMin0
  (__pyx_v_results[0]) = __pyx_v_PMin0;
+4803:     results[1] = PMin1
  (__pyx_v_results[1]) = __pyx_v_PMin1;
+4804:     results[2] = PMin2
  (__pyx_v_results[2]) = __pyx_v_PMin2;
+4805:     results[3] = kPMin
  (__pyx_v_results[3]) = __pyx_v_kPMin;
+4806:     results[4] = RMin
  (__pyx_v_results[4]) = __pyx_v_RMin;
+4807:     results[5] = Theta
  (__pyx_v_results[5]) = __pyx_v_Theta;
+4808:     results[6] = p0
  (__pyx_v_results[6]) = __pyx_v_p0;
+4809:     results[7] = ImpTheta
  (__pyx_v_results[7]) = __pyx_v_ImpTheta;
+4810:     results[8] = phi
  (__pyx_v_results[8]) = __pyx_v_phi;
+4811:     return
  goto __pyx_L0;
 4812: 
+4813: cdef inline void NEW_los_sino_tor_vec(int num_los,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_NEW_los_sino_tor_vec(CYTHON_UNUSED int __pyx_v_num_los, __Pyx_memviewslice __pyx_v_origins, __Pyx_memviewslice __pyx_v_directions, double __pyx_v_circ_radius, double __pyx_v_circ_normz, __Pyx_memviewslice __pyx_v_los_closest_coords, __Pyx_memviewslice __pyx_v_los_closest_coeffs, __Pyx_memviewslice __pyx_v_circle_closest_rmin, __Pyx_memviewslice __pyx_v_circle_closest_theta, __Pyx_memviewslice __pyx_v_circle_closest_p, __Pyx_memviewslice __pyx_v_circle_closest_imptheta, __Pyx_memviewslice __pyx_v_circle_closest_phi, struct __pyx_opt_args_4tofu_4geom_5_GG03_NEW_los_sino_tor_vec *__pyx_optional_args) {
/* … */
  /* function exit code */
  __pyx_L0:;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_NEW_los_sino_tor_vec {
  int __pyx_n;
  int is_LOS_Mode;
  __Pyx_memviewslice kOut;
};
 4814:                                       double[:,::1] origins,
 4815:                                       double[:,::1] directions,
 4816:                                       double circ_radius,
 4817:                                       double circ_normz,
 4818:                                       double[:,::1] los_closest_coords,
 4819:                                       double[::1] los_closest_coeffs,
 4820:                                       double[::1] circle_closest_rmin,
 4821:                                       double[::1] circle_closest_theta,
 4822:                                       double[::1] circle_closest_p,
 4823:                                       double[::1] circle_closest_imptheta,
 4824:                                       double[::1] circle_closest_phi,
+4825:                                       bint is_LOS_Mode=False,
  int __pyx_v_is_LOS_Mode = ((int)0);
  __Pyx_memviewslice __pyx_v_kOut = __pyx_k__89;
  int __pyx_v_ind_los;
  double *__pyx_v_dirv;
  double *__pyx_v_orig;
  double *__pyx_v_res;
  double __pyx_v_normu;
  double __pyx_v_normu_sq;
  double __pyx_v_kPMin;
  double __pyx_v_PMin2norm;
  double __pyx_v_vP0;
  double __pyx_v_vP1;
  double __pyx_v_Theta;
  double __pyx_v_eTheta0;
  double __pyx_v_eTheta1;
  double __pyx_v_normu0;
  double __pyx_v_normu1;
  CYTHON_UNUSED double __pyx_v_distance;
  double __pyx_v_PMin0;
  double __pyx_v_PMin1;
  double __pyx_v_PMin2;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_is_LOS_Mode = __pyx_optional_args->is_LOS_Mode;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_kOut = __pyx_optional_args->kOut;
      }
    }
  }
+4826:                                       double[::1] kOut=None) nogil:
  __pyx_t_5 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(Py_None, PyBUF_WRITABLE); if (unlikely(!__pyx_t_5.memview)) __PYX_ERR(0, 4826, __pyx_L1_error)
  __pyx_k__89 = __pyx_t_5;
  __pyx_t_5.memview = NULL;
  __pyx_t_5.data = NULL;
 4827:     cdef int ind_los
 4828:     cdef double* dirv
 4829:     cdef double* orig
 4830:     cdef double* res
 4831:     cdef double normu, normu_sq
 4832:     cdef double kPMin, PMin2norm, vP0, vP1, Theta
 4833:     cdef double eTheta0
 4834:     cdef double eTheta1
 4835:     cdef double normu0
 4836:     cdef double normu1
 4837:     cdef double distance
 4838:     cdef double PMin0, PMin1, PMin2
 4839: 
+4840:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_dirv, __pyx_v_orig, __pyx_v_res)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_dirv = ((double *)1);
                __pyx_v_orig = ((double *)1);
                __pyx_v_res = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+4841:         dirv = <double*>malloc(3*sizeof(double))
                __pyx_v_dirv = ((double *)malloc((3 * (sizeof(double)))));
+4842:         orig = <double*>malloc(3*sizeof(double))
                __pyx_v_orig = ((double *)malloc((3 * (sizeof(double)))));
+4843:         res = <double*>malloc(2*sizeof(double))
                __pyx_v_res = ((double *)malloc((2 * (sizeof(double)))));
+4844:         for ind_los in prange(num_los):
                __pyx_t_1 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_3 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_PMin0) lastprivate(__pyx_v_PMin1) lastprivate(__pyx_v_PMin2) lastprivate(__pyx_v_PMin2norm) lastprivate(__pyx_v_Theta) lastprivate(__pyx_v_distance) lastprivate(__pyx_v_eTheta0) lastprivate(__pyx_v_eTheta1) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_kPMin) lastprivate(__pyx_v_normu) lastprivate(__pyx_v_normu0) lastprivate(__pyx_v_normu1) lastprivate(__pyx_v_normu_sq) lastprivate(__pyx_v_vP0) lastprivate(__pyx_v_vP1)
                        #endif /* _OPENMP */
                        for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_2);
                                /* Initialize private variables to invalid values */
                                __pyx_v_PMin0 = ((double)__PYX_NAN());
                                __pyx_v_PMin1 = ((double)__PYX_NAN());
                                __pyx_v_PMin2 = ((double)__PYX_NAN());
                                __pyx_v_PMin2norm = ((double)__PYX_NAN());
                                __pyx_v_Theta = ((double)__PYX_NAN());
                                __pyx_v_distance = ((double)__PYX_NAN());
                                __pyx_v_eTheta0 = ((double)__PYX_NAN());
                                __pyx_v_eTheta1 = ((double)__PYX_NAN());
                                __pyx_v_kPMin = ((double)__PYX_NAN());
                                __pyx_v_normu = ((double)__PYX_NAN());
                                __pyx_v_normu0 = ((double)__PYX_NAN());
                                __pyx_v_normu1 = ((double)__PYX_NAN());
                                __pyx_v_normu_sq = ((double)__PYX_NAN());
                                __pyx_v_vP0 = ((double)__PYX_NAN());
                                __pyx_v_vP1 = ((double)__PYX_NAN());
+4845:             dirv[0] = directions[0, ind_los]
                                __pyx_t_4 = 0;
                                __pyx_t_5 = __pyx_v_ind_los;
                                (__pyx_v_dirv[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_directions.data + __pyx_t_4 * __pyx_v_directions.strides[0]) )) + __pyx_t_5)) )));
+4846:             dirv[1] = directions[1, ind_los]
                                __pyx_t_6 = 1;
                                __pyx_t_7 = __pyx_v_ind_los;
                                (__pyx_v_dirv[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_directions.data + __pyx_t_6 * __pyx_v_directions.strides[0]) )) + __pyx_t_7)) )));
+4847:             dirv[2] = directions[2, ind_los]
                                __pyx_t_8 = 2;
                                __pyx_t_9 = __pyx_v_ind_los;
                                (__pyx_v_dirv[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_directions.data + __pyx_t_8 * __pyx_v_directions.strides[0]) )) + __pyx_t_9)) )));
+4848:             orig[0] = origins[0, ind_los]
                                __pyx_t_10 = 0;
                                __pyx_t_11 = __pyx_v_ind_los;
                                (__pyx_v_orig[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_origins.data + __pyx_t_10 * __pyx_v_origins.strides[0]) )) + __pyx_t_11)) )));
+4849:             orig[1] = origins[1, ind_los]
                                __pyx_t_12 = 1;
                                __pyx_t_13 = __pyx_v_ind_los;
                                (__pyx_v_orig[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_origins.data + __pyx_t_12 * __pyx_v_origins.strides[0]) )) + __pyx_t_13)) )));
+4850:             orig[2] = origins[2, ind_los]
                                __pyx_t_14 = 2;
                                __pyx_t_15 = __pyx_v_ind_los;
                                (__pyx_v_orig[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_origins.data + __pyx_t_14 * __pyx_v_origins.strides[0]) )) + __pyx_t_15)) )));
+4851:             normu_sq = dirv[0] * dirv[0] + dirv[1] * dirv[1] + dirv[2] * dirv[2]
                                __pyx_v_normu_sq = ((((__pyx_v_dirv[0]) * (__pyx_v_dirv[0])) + ((__pyx_v_dirv[1]) * (__pyx_v_dirv[1]))) + ((__pyx_v_dirv[2]) * (__pyx_v_dirv[2])));
+4852:             normu = Csqrt(normu_sq)
                                __pyx_v_normu = sqrt(__pyx_v_normu_sq);
 4853:             # Computing coeff of closest on line................................
+4854:             if dirv[0] == 0. and dirv[1] == 0.:
                                __pyx_t_17 = (((__pyx_v_dirv[0]) == 0.) != 0);
                                if (__pyx_t_17) {
                                } else {
                                  __pyx_t_16 = __pyx_t_17;
                                  goto __pyx_L15_bool_binop_done;
                                }
                                __pyx_t_17 = (((__pyx_v_dirv[1]) == 0.) != 0);
                                __pyx_t_16 = __pyx_t_17;
                                __pyx_L15_bool_binop_done:;
                                if (__pyx_t_16) {
/* … */
                                  goto __pyx_L14;
                                }
+4855:                 kPMin = (circ_normz-orig[2])/dirv[2]
                                  __pyx_v_kPMin = ((__pyx_v_circ_normz - (__pyx_v_orig[2])) / (__pyx_v_dirv[2]));
 4856:             else:
+4857:                 dist_los_circle_core(dirv, orig, circ_radius,
                                /*else*/ {
/* … */
                                  __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_dirv, __pyx_v_orig, __pyx_v_circ_radius, __pyx_v_circ_normz, __pyx_v_normu_sq, __pyx_v_res);
 4858:                                      circ_normz, normu_sq, res)
+4859:                 kPMin = res[0]
                                  __pyx_v_kPMin = (__pyx_v_res[0]);
+4860:                 distance = res[1]
                                  __pyx_v_distance = (__pyx_v_res[1]);
                                }
                                __pyx_L14:;
+4861:             if is_LOS_Mode and kOut is not None and kPMin > kOut[ind_los]:
                                __pyx_t_17 = (__pyx_v_is_LOS_Mode != 0);
                                if (__pyx_t_17) {
                                } else {
                                  __pyx_t_16 = __pyx_t_17;
                                  goto __pyx_L18_bool_binop_done;
                                }
                                __pyx_t_17 = ((((PyObject *) __pyx_v_kOut.memview) != Py_None) != 0);
                                if (__pyx_t_17) {
                                } else {
                                  __pyx_t_16 = __pyx_t_17;
                                  goto __pyx_L18_bool_binop_done;
                                }
                                __pyx_t_18 = __pyx_v_ind_los;
                                __pyx_t_17 = ((__pyx_v_kPMin > (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kOut.data) + __pyx_t_18)) )))) != 0);
                                __pyx_t_16 = __pyx_t_17;
                                __pyx_L18_bool_binop_done:;
                                if (__pyx_t_16) {
/* … */
                                }
+4862:                 kPMin = kOut[ind_los]
                                  __pyx_t_19 = __pyx_v_ind_los;
                                  __pyx_v_kPMin = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kOut.data) + __pyx_t_19)) )));
+4863:             los_closest_coeffs[ind_los] = kPMin
                                __pyx_t_20 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_los_closest_coeffs.data) + __pyx_t_20)) )) = __pyx_v_kPMin;
 4864: 
 4865:             # Computing the info of the closest point on LOS & Circle...........
+4866:             PMin0 = orig[0] + kPMin * dirv[0]
                                __pyx_v_PMin0 = ((__pyx_v_orig[0]) + (__pyx_v_kPMin * (__pyx_v_dirv[0])));
+4867:             PMin1 = orig[1] + kPMin * dirv[1]
                                __pyx_v_PMin1 = ((__pyx_v_orig[1]) + (__pyx_v_kPMin * (__pyx_v_dirv[1])));
+4868:             PMin2 = orig[2] + kPMin * dirv[2]
                                __pyx_v_PMin2 = ((__pyx_v_orig[2]) + (__pyx_v_kPMin * (__pyx_v_dirv[2])));
+4869:             los_closest_coords[0, ind_los] = PMin0
                                __pyx_t_21 = 0;
                                __pyx_t_22 = __pyx_v_ind_los;
                                *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_los_closest_coords.data + __pyx_t_21 * __pyx_v_los_closest_coords.strides[0]) )) + __pyx_t_22)) )) = __pyx_v_PMin0;
+4870:             los_closest_coords[1, ind_los] = PMin1
                                __pyx_t_23 = 1;
                                __pyx_t_24 = __pyx_v_ind_los;
                                *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_los_closest_coords.data + __pyx_t_23 * __pyx_v_los_closest_coords.strides[0]) )) + __pyx_t_24)) )) = __pyx_v_PMin1;
+4871:             los_closest_coords[2, ind_los] = PMin2
                                __pyx_t_25 = 2;
                                __pyx_t_26 = __pyx_v_ind_los;
                                *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_los_closest_coords.data + __pyx_t_25 * __pyx_v_los_closest_coords.strides[0]) )) + __pyx_t_26)) )) = __pyx_v_PMin2;
 4872:             # Computing RMin:
+4873:             PMin2norm = Csqrt(PMin0**2+PMin1**2)
                                __pyx_v_PMin2norm = sqrt((pow(__pyx_v_PMin0, 2.0) + pow(__pyx_v_PMin1, 2.0)));
+4874:             circle_closest_rmin[ind_los] = Csqrt((PMin2norm - circ_radius)**2
                                __pyx_t_27 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_circle_closest_rmin.data) + __pyx_t_27)) )) = sqrt((pow((__pyx_v_PMin2norm - __pyx_v_circ_radius), 2.0) + pow((__pyx_v_PMin2 - __pyx_v_circ_normz), 2.0)));
 4875:                                         + (PMin2   - circ_normz)**2)
 4876:             # Theta and ImpTheta:
+4877:             vP0 = PMin2norm - circ_radius
                                __pyx_v_vP0 = (__pyx_v_PMin2norm - __pyx_v_circ_radius);
+4878:             vP1 = PMin2     - circ_normz
                                __pyx_v_vP1 = (__pyx_v_PMin2 - __pyx_v_circ_normz);
+4879:             Theta = Catan2(vP1, vP0)
                                __pyx_v_Theta = atan2(__pyx_v_vP1, __pyx_v_vP0);
+4880:             circle_closest_theta[ind_los] = Theta
                                __pyx_t_28 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_circle_closest_theta.data) + __pyx_t_28)) )) = __pyx_v_Theta;
+4881:             if Theta < 0:
                                __pyx_t_16 = ((__pyx_v_Theta < 0.0) != 0);
                                if (__pyx_t_16) {
/* … */
                                }
+4882:                 Theta = Theta + Cpi
                                  __pyx_v_Theta = (__pyx_v_Theta + M_PI);
+4883:             circle_closest_imptheta[ind_los] = Theta
                                __pyx_t_29 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_circle_closest_imptheta.data) + __pyx_t_29)) )) = __pyx_v_Theta;
+4884:             circle_closest_p[ind_los] = vP0 * Ccos(Theta) + vP1 * Csin(Theta)
                                __pyx_t_30 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_circle_closest_p.data) + __pyx_t_30)) )) = ((__pyx_v_vP0 * cos(__pyx_v_Theta)) + (__pyx_v_vP1 * sin(__pyx_v_Theta)));
 4885:             # Phi:
+4886:             eTheta0 = - PMin1 / PMin2norm
                                __pyx_v_eTheta0 = ((-__pyx_v_PMin1) / __pyx_v_PMin2norm);
+4887:             eTheta1 =   PMin0 / PMin2norm
                                __pyx_v_eTheta1 = (__pyx_v_PMin0 / __pyx_v_PMin2norm);
+4888:             normu0 = dirv[0]/normu
                                __pyx_v_normu0 = ((__pyx_v_dirv[0]) / __pyx_v_normu);
+4889:             normu1 = dirv[1]/normu
                                __pyx_v_normu1 = ((__pyx_v_dirv[1]) / __pyx_v_normu);
+4890:             circle_closest_phi[ind_los] = Casin(-normu0 * eTheta0 - normu1 * eTheta1)
                                __pyx_t_31 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_circle_closest_phi.data) + __pyx_t_31)) )) = asin((((-__pyx_v_normu0) * __pyx_v_eTheta0) - (__pyx_v_normu1 * __pyx_v_eTheta1)));
                            }
                        }
                    }
                }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+4891:     return
  goto __pyx_L0;
 4892: 
 4893: 
 4894: 
+4895: cdef LOS_sino_Lin(double D0, double D1, double D2, double u0, double u1, double u2, double RZ0, double RZ1, str Mode='LOS', double kOut=np.inf):
static PyObject *__pyx_f_4tofu_4geom_5_GG03_LOS_sino_Lin(double __pyx_v_D0, double __pyx_v_D1, double __pyx_v_D2, double __pyx_v_u0, double __pyx_v_u1, double __pyx_v_u2, double __pyx_v_RZ0, double __pyx_v_RZ1, struct __pyx_opt_args_4tofu_4geom_5_GG03_LOS_sino_Lin *__pyx_optional_args) {
  PyObject *__pyx_v_Mode = ((PyObject*)__pyx_n_s_LOS);
  double __pyx_v_kOut = __pyx_k__90;
  double __pyx_v_kPMin;
  double __pyx_v_PMin0;
  double __pyx_v_PMin1;
  double __pyx_v_PMin2;
  double __pyx_v_RMin;
  double __pyx_v_vP0;
  double __pyx_v_vP1;
  double __pyx_v_Theta;
  double __pyx_v_ImpTheta;
  double __pyx_v_er2D0;
  double __pyx_v_er2D1;
  double __pyx_v_p0;
  double __pyx_v_uN;
  double __pyx_v_uN0;
  double __pyx_v_uN1;
  double __pyx_v_uN2;
  double __pyx_v_phi;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino_Lin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_Mode = __pyx_optional_args->Mode;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_kOut = __pyx_optional_args->kOut;
      }
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino_Lin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_inf); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4895, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_k__90 = __pyx_t_6;
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_LOS_sino_Lin {
  int __pyx_n;
  PyObject *Mode;
  double kOut;
};
 4896:     cdef double    kPMin
+4897:     if u0**2==1.:
  __pyx_t_1 = ((pow(__pyx_v_u0, 2.0) == 1.) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4898:         kPMin = 0.
    __pyx_v_kPMin = 0.;
 4899:     else:
+4900:         kPMin = ( (RZ0-D1)*u1+(RZ1-D2)*u2 ) / (1-u0**2)
  /*else*/ {
    __pyx_v_kPMin = ((((__pyx_v_RZ0 - __pyx_v_D1) * __pyx_v_u1) + ((__pyx_v_RZ1 - __pyx_v_D2) * __pyx_v_u2)) / (1.0 - pow(__pyx_v_u0, 2.0)));
  }
  __pyx_L3:;
+4901:     kPMin = kOut if Mode=='LOS' and kPMin > kOut else kPMin
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_Mode, __pyx_n_s_LOS, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 4901, __pyx_L1_error)
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = ((__pyx_v_kPMin > __pyx_v_kOut) != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_t_2 = __pyx_v_kOut;
  } else {
    __pyx_t_2 = __pyx_v_kPMin;
  }
  __pyx_v_kPMin = __pyx_t_2;
+4902:     cdef double    PMin0 = D0+kPMin*u0, PMin1 = D1+kPMin*u1, PMin2 = D2+kPMin*u2
  __pyx_v_PMin0 = (__pyx_v_D0 + (__pyx_v_kPMin * __pyx_v_u0));
  __pyx_v_PMin1 = (__pyx_v_D1 + (__pyx_v_kPMin * __pyx_v_u1));
  __pyx_v_PMin2 = (__pyx_v_D2 + (__pyx_v_kPMin * __pyx_v_u2));
+4903:     cdef double    RMin = Csqrt((PMin1-RZ0)**2+(PMin2-RZ1)**2)
  __pyx_v_RMin = sqrt((pow((__pyx_v_PMin1 - __pyx_v_RZ0), 2.0) + pow((__pyx_v_PMin2 - __pyx_v_RZ1), 2.0)));
+4904:     cdef double    vP0 = PMin1-RZ0, vP1 = PMin2-RZ1
  __pyx_v_vP0 = (__pyx_v_PMin1 - __pyx_v_RZ0);
  __pyx_v_vP1 = (__pyx_v_PMin2 - __pyx_v_RZ1);
+4905:     cdef double    Theta = Catan2(vP1,vP0)
  __pyx_v_Theta = atan2(__pyx_v_vP1, __pyx_v_vP0);
+4906:     cdef double    ImpTheta = Theta if Theta>=0 else Theta + np.pi
  if (((__pyx_v_Theta >= 0.0) != 0)) {
    __pyx_t_2 = __pyx_v_Theta;
  } else {
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_Theta); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_pi); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4906, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_6); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4906, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_2 = __pyx_t_8;
  }
  __pyx_v_ImpTheta = __pyx_t_2;
+4907:     cdef double    er2D0 = Ccos(ImpTheta), er2D1 = Csin(ImpTheta)
  __pyx_v_er2D0 = cos(__pyx_v_ImpTheta);
  __pyx_v_er2D1 = sin(__pyx_v_ImpTheta);
+4908:     cdef double    p0 = vP0*er2D0 + vP1*er2D1
  __pyx_v_p0 = ((__pyx_v_vP0 * __pyx_v_er2D0) + (__pyx_v_vP1 * __pyx_v_er2D1));
+4909:     cdef double    uN = Csqrt(u0**2+u1**2+u2**2)
  __pyx_v_uN = sqrt(((pow(__pyx_v_u0, 2.0) + pow(__pyx_v_u1, 2.0)) + pow(__pyx_v_u2, 2.0)));
+4910:     cdef double    uN0 = u0/uN, uN1 = u1/uN, uN2 = u2/uN
  __pyx_v_uN0 = (__pyx_v_u0 / __pyx_v_uN);
  __pyx_v_uN1 = (__pyx_v_u1 / __pyx_v_uN);
  __pyx_v_uN2 = (__pyx_v_u2 / __pyx_v_uN);
+4911:     cdef double    phi = Catan2(uN0, Csqrt(uN1**2+uN2**2))
  __pyx_v_phi = atan2(__pyx_v_uN0, sqrt((pow(__pyx_v_uN1, 2.0) + pow(__pyx_v_uN2, 2.0))));
+4912:     return (PMin0,PMin1,PMin2), kPMin, RMin, Theta, p0, ImpTheta, phi
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_PMin0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_PMin1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_PMin2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_5);
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_kPMin); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_RMin); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_Theta); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_p0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyFloat_FromDouble(__pyx_v_ImpTheta); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyFloat_FromDouble(__pyx_v_phi); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = PyTuple_New(7); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 4912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_13, 2, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_13, 4, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_13, 5, __pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_13, 6, __pyx_t_12);
  __pyx_t_9 = 0;
  __pyx_t_5 = 0;
  __pyx_t_7 = 0;
  __pyx_t_6 = 0;
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_r = __pyx_t_13;
  __pyx_t_13 = 0;
  goto __pyx_L0;
 4913: 
 4914: 
+4915: def LOS_sino(double[:,::1] D, double[:,::1] u, double[::1] RZ, double[::1] kOut,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_61LOS_sino(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_61LOS_sino = {"LOS_sino", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_61LOS_sino, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_61LOS_sino(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_D = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_u = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_RZ = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_kOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_Mode = 0;
  PyObject *__pyx_v_VType = 0;
  int __pyx_v_try_new_algo;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_D,&__pyx_n_s_u,&__pyx_n_s_RZ,&__pyx_n_s_kOut,&__pyx_n_s_Mode,&__pyx_n_s_VType,&__pyx_n_s_try_new_algo,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
    values[4] = ((PyObject*)__pyx_n_s_LOS);
    values[5] = ((PyObject*)__pyx_n_s_Tor);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_D)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino", 0, 4, 7, 1); __PYX_ERR(0, 4915, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RZ)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino", 0, 4, 7, 2); __PYX_ERR(0, 4915, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kOut)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("LOS_sino", 0, 4, 7, 3); __PYX_ERR(0, 4915, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Mode);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VType);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_try_new_algo);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "LOS_sino") < 0)) __PYX_ERR(0, 4915, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_D = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_D.memview)) __PYX_ERR(0, 4915, __pyx_L3_error)
    __pyx_v_u = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_u.memview)) __PYX_ERR(0, 4915, __pyx_L3_error)
    __pyx_v_RZ = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_RZ.memview)) __PYX_ERR(0, 4915, __pyx_L3_error)
    __pyx_v_kOut = __Pyx_PyObject_to_MemoryviewSlice_dc_double(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_kOut.memview)) __PYX_ERR(0, 4915, __pyx_L3_error)
    __pyx_v_Mode = ((PyObject*)values[4]);
    __pyx_v_VType = ((PyObject*)values[5]);
    if (values[6]) {
      __pyx_v_try_new_algo = __Pyx_PyObject_IsTrue(values[6]); if (unlikely((__pyx_v_try_new_algo == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4916, __pyx_L3_error)
    } else {
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_60LOS_sino(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_D, __Pyx_memviewslice __pyx_v_u, __Pyx_memviewslice __pyx_v_RZ, __Pyx_memviewslice __pyx_v_kOut, PyObject *__pyx_v_Mode, PyObject *__pyx_v_VType, int __pyx_v_try_new_algo) {
  unsigned int __pyx_v_nL;
  unsigned int __pyx_v_ii;
  PyObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_PMin = 0;
  PyArrayObject *__pyx_v_kPMin = 0;
  PyArrayObject *__pyx_v_RMin = 0;
  PyArrayObject *__pyx_v_Theta = 0;
  PyArrayObject *__pyx_v_p = 0;
  PyArrayObject *__pyx_v_ImpTheta = 0;
  PyArrayObject *__pyx_v_phi = 0;
  int __pyx_v_is_LOS_Mode;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ImpTheta;
  __Pyx_Buffer __pyx_pybuffer_ImpTheta;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_PMin;
  __Pyx_Buffer __pyx_pybuffer_PMin;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_RMin;
  __Pyx_Buffer __pyx_pybuffer_RMin;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_Theta;
  __Pyx_Buffer __pyx_pybuffer_Theta;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_kPMin;
  __Pyx_Buffer __pyx_pybuffer_kPMin;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_p;
  __Pyx_Buffer __pyx_pybuffer_p;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_phi;
  __Pyx_Buffer __pyx_pybuffer_phi;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("LOS_sino", 0);
  __pyx_pybuffer_PMin.pybuffer.buf = NULL;
  __pyx_pybuffer_PMin.refcount = 0;
  __pyx_pybuffernd_PMin.data = NULL;
  __pyx_pybuffernd_PMin.rcbuffer = &__pyx_pybuffer_PMin;
  __pyx_pybuffer_kPMin.pybuffer.buf = NULL;
  __pyx_pybuffer_kPMin.refcount = 0;
  __pyx_pybuffernd_kPMin.data = NULL;
  __pyx_pybuffernd_kPMin.rcbuffer = &__pyx_pybuffer_kPMin;
  __pyx_pybuffer_RMin.pybuffer.buf = NULL;
  __pyx_pybuffer_RMin.refcount = 0;
  __pyx_pybuffernd_RMin.data = NULL;
  __pyx_pybuffernd_RMin.rcbuffer = &__pyx_pybuffer_RMin;
  __pyx_pybuffer_Theta.pybuffer.buf = NULL;
  __pyx_pybuffer_Theta.refcount = 0;
  __pyx_pybuffernd_Theta.data = NULL;
  __pyx_pybuffernd_Theta.rcbuffer = &__pyx_pybuffer_Theta;
  __pyx_pybuffer_p.pybuffer.buf = NULL;
  __pyx_pybuffer_p.refcount = 0;
  __pyx_pybuffernd_p.data = NULL;
  __pyx_pybuffernd_p.rcbuffer = &__pyx_pybuffer_p;
  __pyx_pybuffer_ImpTheta.pybuffer.buf = NULL;
  __pyx_pybuffer_ImpTheta.refcount = 0;
  __pyx_pybuffernd_ImpTheta.data = NULL;
  __pyx_pybuffernd_ImpTheta.rcbuffer = &__pyx_pybuffer_ImpTheta;
  __pyx_pybuffer_phi.pybuffer.buf = NULL;
  __pyx_pybuffer_phi.refcount = 0;
  __pyx_pybuffernd_phi.data = NULL;
  __pyx_pybuffernd_phi.rcbuffer = &__pyx_pybuffer_phi;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_29);
  __Pyx_XDECREF(__pyx_t_30);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_XDECREF(__pyx_t_38);
  __Pyx_XDECREF(__pyx_t_39);
  __Pyx_XDECREF(__pyx_t_40);
  __Pyx_XDECREF(__pyx_t_41);
  __PYX_XDEC_MEMVIEW(&__pyx_t_60, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_61, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_62, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_63, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_64, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_65, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_66, 1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PMin.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_RMin.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Theta.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kPMin.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_phi.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_PMin.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_RMin.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_Theta.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_kPMin.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_p.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_phi.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_PMin);
  __Pyx_XDECREF((PyObject *)__pyx_v_kPMin);
  __Pyx_XDECREF((PyObject *)__pyx_v_RMin);
  __Pyx_XDECREF((PyObject *)__pyx_v_Theta);
  __Pyx_XDECREF((PyObject *)__pyx_v_p);
  __Pyx_XDECREF((PyObject *)__pyx_v_ImpTheta);
  __Pyx_XDECREF((PyObject *)__pyx_v_phi);
  __PYX_XDEC_MEMVIEW(&__pyx_v_D, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_u, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_RZ, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_kOut, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__218 = PyTuple_Pack(19, __pyx_n_s_D, __pyx_n_s_u, __pyx_n_s_RZ, __pyx_n_s_kOut, __pyx_n_s_Mode, __pyx_n_s_VType, __pyx_n_s_try_new_algo, __pyx_n_s_nL, __pyx_n_s_ii, __pyx_n_s_out, __pyx_n_s_PMin, __pyx_n_s_kPMin, __pyx_n_s_RMin, __pyx_n_s_Theta, __pyx_n_s_p, __pyx_n_s_ImpTheta, __pyx_n_s_phi, __pyx_n_s_results, __pyx_n_s_is_LOS_Mode); if (unlikely(!__pyx_tuple__218)) __PYX_ERR(0, 4915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__218);
  __Pyx_GIVEREF(__pyx_tuple__218);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_61LOS_sino, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LOS_sino, __pyx_t_2) < 0) __PYX_ERR(0, 4915, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__219 = (PyObject*)__Pyx_PyCode_New(7, 0, 19, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__218, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_LOS_sino, 4915, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__219)) __PYX_ERR(0, 4915, __pyx_L1_error)
+4916:              str Mode='LOS', str VType='Tor', bint try_new_algo=True):
      __pyx_v_try_new_algo = ((int)1);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("LOS_sino", 0, 4, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4915, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.LOS_sino", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_Mode), (&PyString_Type), 1, "Mode", 1))) __PYX_ERR(0, 4916, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VType), (&PyString_Type), 1, "VType", 1))) __PYX_ERR(0, 4916, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_60LOS_sino(__pyx_self, __pyx_v_D, __pyx_v_u, __pyx_v_RZ, __pyx_v_kOut, __pyx_v_Mode, __pyx_v_VType, __pyx_v_try_new_algo);
+4917:     cdef unsigned int nL = D.shape[1], ii
  __pyx_v_nL = (__pyx_v_D.shape[1]);
 4918:     cdef tuple out
+4919:     cdef np.ndarray[double,ndim=2] PMin = np.empty((3,nL))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4919, __pyx_L1_error)
  __pyx_t_5 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_PMin.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_PMin = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4919, __pyx_L1_error)
    } else {__pyx_pybuffernd_PMin.diminfo[0].strides = __pyx_pybuffernd_PMin.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_PMin.diminfo[0].shape = __pyx_pybuffernd_PMin.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_PMin.diminfo[1].strides = __pyx_pybuffernd_PMin.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_PMin.diminfo[1].shape = __pyx_pybuffernd_PMin.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_5 = 0;
  __pyx_v_PMin = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4920:     cdef np.ndarray[double,ndim=1] kPMin=np.empty((nL,)), RMin=np.empty((nL,))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4920, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_kPMin.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_kPMin = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_kPMin.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4920, __pyx_L1_error)
    } else {__pyx_pybuffernd_kPMin.diminfo[0].strides = __pyx_pybuffernd_kPMin.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_kPMin.diminfo[0].shape = __pyx_pybuffernd_kPMin.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_kPMin = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4920, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4920, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_RMin.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_RMin = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_RMin.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4920, __pyx_L1_error)
    } else {__pyx_pybuffernd_RMin.diminfo[0].strides = __pyx_pybuffernd_RMin.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_RMin.diminfo[0].shape = __pyx_pybuffernd_RMin.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_RMin = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4921:     cdef np.ndarray[double,ndim=1] Theta=np.empty((nL,)), p=np.empty((nL,))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4921, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_Theta.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_Theta = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_Theta.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4921, __pyx_L1_error)
    } else {__pyx_pybuffernd_Theta.diminfo[0].strides = __pyx_pybuffernd_Theta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_Theta.diminfo[0].shape = __pyx_pybuffernd_Theta.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_Theta = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4921, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_p.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_p = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_p.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4921, __pyx_L1_error)
    } else {__pyx_pybuffernd_p.diminfo[0].strides = __pyx_pybuffernd_p.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_p.diminfo[0].shape = __pyx_pybuffernd_p.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_p = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
+4922:     cdef np.ndarray[double,ndim=1] ImpTheta=np.empty((nL,)), phi=np.empty((nL,))
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4922, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_ImpTheta = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4922, __pyx_L1_error)
    } else {__pyx_pybuffernd_ImpTheta.diminfo[0].strides = __pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ImpTheta.diminfo[0].shape = __pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_ImpTheta = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4922, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_phi.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_phi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4922, __pyx_L1_error)
    } else {__pyx_pybuffernd_phi.diminfo[0].strides = __pyx_pybuffernd_phi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_phi.diminfo[0].shape = __pyx_pybuffernd_phi.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_phi = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
 4923:     cdef double[9] results
 4924:     cdef bint is_LOS_Mode
+4925:     if VType.lower()=='tor':
  __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_VType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 4925, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {
/* … */
    goto __pyx_L3;
  }
+4926:         if not try_new_algo:
    __pyx_t_9 = ((!(__pyx_v_try_new_algo != 0)) != 0);
    if (__pyx_t_9) {
/* … */
      goto __pyx_L4;
    }
+4927:             for ii in range(0,nL):
      __pyx_t_10 = __pyx_v_nL;
      __pyx_t_11 = __pyx_t_10;
      for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
        __pyx_v_ii = __pyx_t_12;
+4928:                 out = LOS_sino_Tor(D[0,ii],D[1,ii],D[2,ii],
        __pyx_t_13 = 0;
        __pyx_t_14 = __pyx_v_ii;
        __pyx_t_15 = 1;
        __pyx_t_16 = __pyx_v_ii;
        __pyx_t_17 = 2;
        __pyx_t_18 = __pyx_v_ii;
/* … */
        __pyx_t_28.__pyx_n = 2;
        __pyx_t_28.Mode = __pyx_v_Mode;
        __pyx_t_28.kOut = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kOut.data) + __pyx_t_27)) )));
        __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03_LOS_sino_Tor((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_13 * __pyx_v_D.strides[0]) )) + __pyx_t_14)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_15 * __pyx_v_D.strides[0]) )) + __pyx_t_16)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_17 * __pyx_v_D.strides[0]) )) + __pyx_t_18)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_19 * __pyx_v_u.strides[0]) )) + __pyx_t_20)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_21 * __pyx_v_u.strides[0]) )) + __pyx_t_22)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_23 * __pyx_v_u.strides[0]) )) + __pyx_t_24)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_25)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_26)) ))), &__pyx_t_28); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4928, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 4928, __pyx_L1_error)
        __Pyx_XDECREF_SET(__pyx_v_out, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;
+4929:                                    u[0,ii],u[1,ii],u[2,ii],
        __pyx_t_19 = 0;
        __pyx_t_20 = __pyx_v_ii;
        __pyx_t_21 = 1;
        __pyx_t_22 = __pyx_v_ii;
        __pyx_t_23 = 2;
        __pyx_t_24 = __pyx_v_ii;
+4930:                                    RZ[0],RZ[1], Mode=Mode, kOut=kOut[ii])
        __pyx_t_25 = 0;
        __pyx_t_26 = 1;
        __pyx_t_27 = __pyx_v_ii;
+4931:                 ((PMin[0,ii],PMin[1,ii],PMin[2,ii]),
        __pyx_t_32 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_32 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_33 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_33 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_34 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_34 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_35 = __pyx_PyFloat_AsDouble(__pyx_t_29); if (unlikely((__pyx_t_35 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
        __pyx_t_36 = __pyx_PyFloat_AsDouble(__pyx_t_30); if (unlikely((__pyx_t_36 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
        __pyx_t_37 = __pyx_PyFloat_AsDouble(__pyx_t_31); if (unlikely((__pyx_t_37 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
        if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
          PyObject* sequence = __pyx_t_1;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 3)) {
            if (size > 3) __Pyx_RaiseTooManyValuesError(3);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 4931, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_38 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_39 = PyTuple_GET_ITEM(sequence, 1); 
            __pyx_t_40 = PyTuple_GET_ITEM(sequence, 2); 
          } else {
            __pyx_t_38 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_39 = PyList_GET_ITEM(sequence, 1); 
            __pyx_t_40 = PyList_GET_ITEM(sequence, 2); 
          }
          __Pyx_INCREF(__pyx_t_38);
          __Pyx_INCREF(__pyx_t_39);
          __Pyx_INCREF(__pyx_t_40);
          #else
          __pyx_t_38 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_38)) __PYX_ERR(0, 4931, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_38);
          __pyx_t_39 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_39)) __PYX_ERR(0, 4931, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_39);
          __pyx_t_40 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4931, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_40);
          #endif
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        } else {
          Py_ssize_t index = -1;
          __pyx_t_41 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4931, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_41);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_42 = Py_TYPE(__pyx_t_41)->tp_iternext;
          index = 0; __pyx_t_38 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_38)) goto __pyx_L7_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_38);
          index = 1; __pyx_t_39 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_39)) goto __pyx_L7_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_39);
          index = 2; __pyx_t_40 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_40)) goto __pyx_L7_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_40);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_42(__pyx_t_41), 3) < 0) __PYX_ERR(0, 4931, __pyx_L1_error)
          __pyx_t_42 = NULL;
          __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
          goto __pyx_L8_unpacking_done;
          __pyx_L7_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
          __pyx_t_42 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 4931, __pyx_L1_error)
          __pyx_L8_unpacking_done:;
        }
        __pyx_t_43 = __pyx_PyFloat_AsDouble(__pyx_t_38); if (unlikely((__pyx_t_43 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_38); __pyx_t_38 = 0;
        __pyx_t_44 = __pyx_PyFloat_AsDouble(__pyx_t_39); if (unlikely((__pyx_t_44 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_39); __pyx_t_39 = 0;
        __pyx_t_45 = __pyx_PyFloat_AsDouble(__pyx_t_40); if (unlikely((__pyx_t_45 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4931, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
        __pyx_t_46 = 0;
        __pyx_t_47 = __pyx_v_ii;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_46, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_47, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_43;
        __pyx_t_48 = 1;
        __pyx_t_49 = __pyx_v_ii;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_48, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_49, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_44;
        __pyx_t_50 = 2;
        __pyx_t_51 = __pyx_v_ii;
        *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_50, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_51, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_45;
+4932:                  kPMin[ii], RMin[ii], Theta[ii],
        __pyx_t_52 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kPMin.rcbuffer->pybuffer.buf, __pyx_t_52, __pyx_pybuffernd_kPMin.diminfo[0].strides) = __pyx_t_32;
        __pyx_t_53 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_RMin.rcbuffer->pybuffer.buf, __pyx_t_53, __pyx_pybuffernd_RMin.diminfo[0].strides) = __pyx_t_33;
        __pyx_t_54 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Theta.rcbuffer->pybuffer.buf, __pyx_t_54, __pyx_pybuffernd_Theta.diminfo[0].strides) = __pyx_t_34;
+4933:                  p[ii], ImpTheta[ii], phi[ii]) = out
        if (likely(__pyx_v_out != Py_None)) {
          PyObject* sequence = __pyx_v_out;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 7)) {
            if (size > 7) __Pyx_RaiseTooManyValuesError(7);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 4931, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
          __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); 
          __pyx_t_29 = PyTuple_GET_ITEM(sequence, 4); 
          __pyx_t_30 = PyTuple_GET_ITEM(sequence, 5); 
          __pyx_t_31 = PyTuple_GET_ITEM(sequence, 6); 
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_4);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_29);
          __Pyx_INCREF(__pyx_t_30);
          __Pyx_INCREF(__pyx_t_31);
          #else
          {
            Py_ssize_t i;
            PyObject** temps[7] = {&__pyx_t_1,&__pyx_t_3,&__pyx_t_4,&__pyx_t_2,&__pyx_t_29,&__pyx_t_30,&__pyx_t_31};
            for (i=0; i < 7; i++) {
              PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 4931, __pyx_L1_error)
              __Pyx_GOTREF(item);
              *(temps[i]) = item;
            }
          }
          #endif
        } else {
          __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 4931, __pyx_L1_error)
        }
/* … */
        __pyx_t_55 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_55, __pyx_pybuffernd_p.diminfo[0].strides) = __pyx_t_35;
        __pyx_t_56 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer.buf, __pyx_t_56, __pyx_pybuffernd_ImpTheta.diminfo[0].strides) = __pyx_t_36;
        __pyx_t_57 = __pyx_v_ii;
        *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_57, __pyx_pybuffernd_phi.diminfo[0].strides) = __pyx_t_37;
      }
 4934:         else:
+4935:             is_LOS_Mode = Mode.lower() == 'los'
    /*else*/ {
      __pyx_t_31 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_Mode); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 4935, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_31);
      __pyx_t_30 = PyObject_RichCompare(__pyx_t_31, __pyx_n_s_los, Py_EQ); __Pyx_XGOTREF(__pyx_t_30); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4935, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_30); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4935, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
      __pyx_v_is_LOS_Mode = __pyx_t_9;
+4936:             NEW_los_sino_tor_vec(nL, D, u, RZ[0], RZ[1],
      __pyx_t_58 = 0;
      __pyx_t_59 = 1;
/* … */
      __pyx_t_67.__pyx_n = 2;
      __pyx_t_67.is_LOS_Mode = __pyx_v_is_LOS_Mode;
      __pyx_t_67.kOut = __pyx_v_kOut;
      __pyx_f_4tofu_4geom_5_GG03_NEW_los_sino_tor_vec(__pyx_v_nL, __pyx_v_D, __pyx_v_u, (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_58)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_59)) ))), __pyx_t_60, __pyx_t_61, __pyx_t_62, __pyx_t_63, __pyx_t_64, __pyx_t_65, __pyx_t_66, &__pyx_t_67); 
      __PYX_XDEC_MEMVIEW(&__pyx_t_60, 1);
      __pyx_t_60.memview = NULL;
      __pyx_t_60.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_61, 1);
      __pyx_t_61.memview = NULL;
      __pyx_t_61.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_62, 1);
      __pyx_t_62.memview = NULL;
      __pyx_t_62.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_63, 1);
      __pyx_t_63.memview = NULL;
      __pyx_t_63.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_64, 1);
      __pyx_t_64.memview = NULL;
      __pyx_t_64.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_65, 1);
      __pyx_t_65.memview = NULL;
      __pyx_t_65.data = NULL;
      __PYX_XDEC_MEMVIEW(&__pyx_t_66, 1);
      __pyx_t_66.memview = NULL;
      __pyx_t_66.data = NULL;
    }
    __pyx_L4:;
+4937:                                  PMin, kPMin, RMin, Theta, p,
      __pyx_t_60 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_PMin), PyBUF_WRITABLE); if (unlikely(!__pyx_t_60.memview)) __PYX_ERR(0, 4937, __pyx_L1_error)
      __pyx_t_61 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_kPMin), PyBUF_WRITABLE); if (unlikely(!__pyx_t_61.memview)) __PYX_ERR(0, 4937, __pyx_L1_error)
      __pyx_t_62 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_RMin), PyBUF_WRITABLE); if (unlikely(!__pyx_t_62.memview)) __PYX_ERR(0, 4937, __pyx_L1_error)
      __pyx_t_63 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_Theta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_63.memview)) __PYX_ERR(0, 4937, __pyx_L1_error)
      __pyx_t_64 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_p), PyBUF_WRITABLE); if (unlikely(!__pyx_t_64.memview)) __PYX_ERR(0, 4937, __pyx_L1_error)
+4938:                                  ImpTheta, phi,
      __pyx_t_65 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_ImpTheta), PyBUF_WRITABLE); if (unlikely(!__pyx_t_65.memview)) __PYX_ERR(0, 4938, __pyx_L1_error)
      __pyx_t_66 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_phi), PyBUF_WRITABLE); if (unlikely(!__pyx_t_66.memview)) __PYX_ERR(0, 4938, __pyx_L1_error)
 4939:                                  is_LOS_Mode=is_LOS_Mode,
 4940:                                  kOut=kOut)
 4941:     else:
+4942:         for ii in range(0,nL):
  /*else*/ {
    __pyx_t_10 = __pyx_v_nL;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_ii = __pyx_t_12;
+4943:             out = LOS_sino_Lin(D[0,ii],D[1,ii],D[2,ii],u[0,ii],u[1,ii],u[2,ii],
      __pyx_t_68 = 0;
      __pyx_t_69 = __pyx_v_ii;
      __pyx_t_70 = 1;
      __pyx_t_71 = __pyx_v_ii;
      __pyx_t_72 = 2;
      __pyx_t_73 = __pyx_v_ii;
      __pyx_t_74 = 0;
      __pyx_t_75 = __pyx_v_ii;
      __pyx_t_76 = 1;
      __pyx_t_77 = __pyx_v_ii;
      __pyx_t_78 = 2;
      __pyx_t_79 = __pyx_v_ii;
/* … */
      __pyx_t_83.__pyx_n = 2;
      __pyx_t_83.Mode = __pyx_v_Mode;
      __pyx_t_83.kOut = (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kOut.data) + __pyx_t_82)) )));
      __pyx_t_30 = __pyx_f_4tofu_4geom_5_GG03_LOS_sino_Lin((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_68 * __pyx_v_D.strides[0]) )) + __pyx_t_69)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_70 * __pyx_v_D.strides[0]) )) + __pyx_t_71)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_D.data + __pyx_t_72 * __pyx_v_D.strides[0]) )) + __pyx_t_73)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_74 * __pyx_v_u.strides[0]) )) + __pyx_t_75)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_76 * __pyx_v_u.strides[0]) )) + __pyx_t_77)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_u.data + __pyx_t_78 * __pyx_v_u.strides[0]) )) + __pyx_t_79)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_80)) ))), (*((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_RZ.data) + __pyx_t_81)) ))), &__pyx_t_83); if (unlikely(!__pyx_t_30)) __PYX_ERR(0, 4943, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_30);
      if (!(likely(PyTuple_CheckExact(__pyx_t_30))||((__pyx_t_30) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_30)->tp_name), 0))) __PYX_ERR(0, 4943, __pyx_L1_error)
      __Pyx_XDECREF_SET(__pyx_v_out, ((PyObject*)__pyx_t_30));
      __pyx_t_30 = 0;
+4944:                                RZ[0],RZ[1], Mode=Mode, kOut=kOut[ii])
      __pyx_t_80 = 0;
      __pyx_t_81 = 1;
      __pyx_t_82 = __pyx_v_ii;
+4945:             ((PMin[0,ii],PMin[1,ii],PMin[2,ii]),
      __pyx_t_37 = __pyx_PyFloat_AsDouble(__pyx_t_31); if (unlikely((__pyx_t_37 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
      __pyx_t_36 = __pyx_PyFloat_AsDouble(__pyx_t_29); if (unlikely((__pyx_t_36 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_29); __pyx_t_29 = 0;
      __pyx_t_35 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_35 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_34 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_34 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_33 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_33 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_32 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_32 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if ((likely(PyTuple_CheckExact(__pyx_t_30))) || (PyList_CheckExact(__pyx_t_30))) {
        PyObject* sequence = __pyx_t_30;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 3)) {
          if (size > 3) __Pyx_RaiseTooManyValuesError(3);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 4945, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_40 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_39 = PyTuple_GET_ITEM(sequence, 1); 
          __pyx_t_38 = PyTuple_GET_ITEM(sequence, 2); 
        } else {
          __pyx_t_40 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_39 = PyList_GET_ITEM(sequence, 1); 
          __pyx_t_38 = PyList_GET_ITEM(sequence, 2); 
        }
        __Pyx_INCREF(__pyx_t_40);
        __Pyx_INCREF(__pyx_t_39);
        __Pyx_INCREF(__pyx_t_38);
        #else
        __pyx_t_40 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_40)) __PYX_ERR(0, 4945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_40);
        __pyx_t_39 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_39)) __PYX_ERR(0, 4945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_39);
        __pyx_t_38 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_38)) __PYX_ERR(0, 4945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_38);
        #endif
        __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_41 = PyObject_GetIter(__pyx_t_30); if (unlikely(!__pyx_t_41)) __PYX_ERR(0, 4945, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_41);
        __Pyx_DECREF(__pyx_t_30); __pyx_t_30 = 0;
        __pyx_t_42 = Py_TYPE(__pyx_t_41)->tp_iternext;
        index = 0; __pyx_t_40 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_40)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_40);
        index = 1; __pyx_t_39 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_39)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_39);
        index = 2; __pyx_t_38 = __pyx_t_42(__pyx_t_41); if (unlikely(!__pyx_t_38)) goto __pyx_L11_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_38);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_42(__pyx_t_41), 3) < 0) __PYX_ERR(0, 4945, __pyx_L1_error)
        __pyx_t_42 = NULL;
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        goto __pyx_L12_unpacking_done;
        __pyx_L11_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_41); __pyx_t_41 = 0;
        __pyx_t_42 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 4945, __pyx_L1_error)
        __pyx_L12_unpacking_done:;
      }
      __pyx_t_45 = __pyx_PyFloat_AsDouble(__pyx_t_40); if (unlikely((__pyx_t_45 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_40); __pyx_t_40 = 0;
      __pyx_t_44 = __pyx_PyFloat_AsDouble(__pyx_t_39); if (unlikely((__pyx_t_44 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_39); __pyx_t_39 = 0;
      __pyx_t_43 = __pyx_PyFloat_AsDouble(__pyx_t_38); if (unlikely((__pyx_t_43 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4945, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_38); __pyx_t_38 = 0;
      __pyx_t_84 = 0;
      __pyx_t_85 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_84, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_85, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_45;
      __pyx_t_86 = 1;
      __pyx_t_87 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_86, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_87, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_44;
      __pyx_t_88 = 2;
      __pyx_t_89 = __pyx_v_ii;
      *__Pyx_BufPtrStrided2d(double *, __pyx_pybuffernd_PMin.rcbuffer->pybuffer.buf, __pyx_t_88, __pyx_pybuffernd_PMin.diminfo[0].strides, __pyx_t_89, __pyx_pybuffernd_PMin.diminfo[1].strides) = __pyx_t_43;
+4946:              kPMin[ii], RMin[ii], Theta[ii], p[ii], ImpTheta[ii], phi[ii]) = out
      if (likely(__pyx_v_out != Py_None)) {
        PyObject* sequence = __pyx_v_out;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 7)) {
          if (size > 7) __Pyx_RaiseTooManyValuesError(7);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 4945, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_30 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_31 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_29 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 5); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 6); 
        __Pyx_INCREF(__pyx_t_30);
        __Pyx_INCREF(__pyx_t_31);
        __Pyx_INCREF(__pyx_t_29);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        #else
        {
          Py_ssize_t i;
          PyObject** temps[7] = {&__pyx_t_30,&__pyx_t_31,&__pyx_t_29,&__pyx_t_2,&__pyx_t_4,&__pyx_t_3,&__pyx_t_1};
          for (i=0; i < 7; i++) {
            PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 4945, __pyx_L1_error)
            __Pyx_GOTREF(item);
            *(temps[i]) = item;
          }
        }
        #endif
      } else {
        __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 4945, __pyx_L1_error)
      }
/* … */
      __pyx_t_90 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_kPMin.rcbuffer->pybuffer.buf, __pyx_t_90, __pyx_pybuffernd_kPMin.diminfo[0].strides) = __pyx_t_37;
      __pyx_t_91 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_RMin.rcbuffer->pybuffer.buf, __pyx_t_91, __pyx_pybuffernd_RMin.diminfo[0].strides) = __pyx_t_36;
      __pyx_t_92 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_Theta.rcbuffer->pybuffer.buf, __pyx_t_92, __pyx_pybuffernd_Theta.diminfo[0].strides) = __pyx_t_35;
      __pyx_t_93 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_p.rcbuffer->pybuffer.buf, __pyx_t_93, __pyx_pybuffernd_p.diminfo[0].strides) = __pyx_t_34;
      __pyx_t_94 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_ImpTheta.rcbuffer->pybuffer.buf, __pyx_t_94, __pyx_pybuffernd_ImpTheta.diminfo[0].strides) = __pyx_t_33;
      __pyx_t_95 = __pyx_v_ii;
      *__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_phi.rcbuffer->pybuffer.buf, __pyx_t_95, __pyx_pybuffernd_phi.diminfo[0].strides) = __pyx_t_32;
    }
  }
  __pyx_L3:;
+4947:     return PMin, kPMin, RMin, Theta, p, ImpTheta, phi
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_PMin));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_PMin));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_PMin));
  __Pyx_INCREF(((PyObject *)__pyx_v_kPMin));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_kPMin));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_kPMin));
  __Pyx_INCREF(((PyObject *)__pyx_v_RMin));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_RMin));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_RMin));
  __Pyx_INCREF(((PyObject *)__pyx_v_Theta));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_Theta));
  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_Theta));
  __Pyx_INCREF(((PyObject *)__pyx_v_p));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_p));
  PyTuple_SET_ITEM(__pyx_t_1, 4, ((PyObject *)__pyx_v_p));
  __Pyx_INCREF(((PyObject *)__pyx_v_ImpTheta));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_ImpTheta));
  PyTuple_SET_ITEM(__pyx_t_1, 5, ((PyObject *)__pyx_v_ImpTheta));
  __Pyx_INCREF(((PyObject *)__pyx_v_phi));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_phi));
  PyTuple_SET_ITEM(__pyx_t_1, 6, ((PyObject *)__pyx_v_phi));
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4948: 
 4949: 
 4950: 
 4951: 
 4952: 
 4953: 
 4954: 
 4955: """
 4956: ########################################################
 4957: ########################################################
 4958: ########################################################
 4959: #                   Solid Angle
 4960: ########################################################
 4961: ########################################################
 4962: ########################################################
 4963: """
 4964: 
 4965: 
 4966: ######################################################
 4967: ######################################################
 4968: #               Dust
 4969: ######################################################
 4970: ######################################################
 4971: 
 4972: 
+4973: def Dust_calc_SolidAngle(pos, r, pts,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_63Dust_calc_SolidAngle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_62Dust_calc_SolidAngle[] = " Compute the solid angle of a moving particle of varying radius as seen\n    from any number of pixed points\n\n    Can be done w/o the approximation that r<<d\n    If Ves (and optionally LSPoly) are provided, takes into account vignetting\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_63Dust_calc_SolidAngle = {"Dust_calc_SolidAngle", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_63Dust_calc_SolidAngle, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_62Dust_calc_SolidAngle};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_63Dust_calc_SolidAngle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_pos = 0;
  PyObject *__pyx_v_r = 0;
  PyObject *__pyx_v_pts = 0;
  PyObject *__pyx_v_approx = 0;
  PyObject *__pyx_v_out_coefonly = 0;
  PyObject *__pyx_v_VType = 0;
  PyObject *__pyx_v_VPoly = 0;
  PyObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_VLim = 0;
  PyObject *__pyx_v_LSPoly = 0;
  PyObject *__pyx_v_LSLim = 0;
  PyObject *__pyx_v_LSVIn = 0;
  PyObject *__pyx_v_Forbid = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dust_calc_SolidAngle (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pos,&__pyx_n_s_r,&__pyx_n_s_pts,&__pyx_n_s_approx,&__pyx_n_s_out_coefonly,&__pyx_n_s_VType,&__pyx_n_s_VPoly,&__pyx_n_s_VIn,&__pyx_n_s_VLim,&__pyx_n_s_LSPoly,&__pyx_n_s_LSLim,&__pyx_n_s_LSVIn,&__pyx_n_s_Forbid,&__pyx_n_s_Test,0};
    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_62Dust_calc_SolidAngle(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_pos, PyObject *__pyx_v_r, PyObject *__pyx_v_pts, PyObject *__pyx_v_approx, PyObject *__pyx_v_out_coefonly, PyObject *__pyx_v_VType, PyObject *__pyx_v_VPoly, PyObject *__pyx_v_VIn, PyObject *__pyx_v_VLim, PyObject *__pyx_v_LSPoly, PyObject *__pyx_v_LSLim, PyObject *__pyx_v_LSVIn, PyObject *__pyx_v_Forbid, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_block = 0;
  float __pyx_v_pir2;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_nptsok;
  int __pyx_v_nt;
  int __pyx_v_npts;
  PyArrayObject *__pyx_v_sang = 0;
  PyObject *__pyx_v_ind = NULL;
  PyObject *__pyx_v_ptstemp = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_vis = NULL;
  PyObject *__pyx_v_dij2 = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_sang;
  __Pyx_Buffer __pyx_pybuffer_sang;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Dust_calc_SolidAngle", 0);
  __pyx_pybuffer_sang.pybuffer.buf = NULL;
  __pyx_pybuffer_sang.refcount = 0;
  __pyx_pybuffernd_sang.data = NULL;
  __pyx_pybuffernd_sang.rcbuffer = &__pyx_pybuffer_sang;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_14);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sang.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Dust_calc_SolidAngle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_sang.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_block);
  __Pyx_XDECREF((PyObject *)__pyx_v_sang);
  __Pyx_XDECREF(__pyx_v_ind);
  __Pyx_XDECREF(__pyx_v_ptstemp);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_vis);
  __Pyx_XDECREF(__pyx_v_dij2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__220 = PyTuple_Pack(27, __pyx_n_s_pos, __pyx_n_s_r, __pyx_n_s_pts, __pyx_n_s_approx, __pyx_n_s_out_coefonly, __pyx_n_s_VType, __pyx_n_s_VPoly, __pyx_n_s_VIn, __pyx_n_s_VLim, __pyx_n_s_LSPoly, __pyx_n_s_LSLim, __pyx_n_s_LSVIn, __pyx_n_s_Forbid, __pyx_n_s_Test, __pyx_n_s_block, __pyx_n_s_pir2, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_nptsok, __pyx_n_s_nt, __pyx_n_s_npts, __pyx_n_s_sang, __pyx_n_s_ind, __pyx_n_s_ptstemp, __pyx_n_s_k, __pyx_n_s_vis, __pyx_n_s_dij2); if (unlikely(!__pyx_tuple__220)) __PYX_ERR(0, 4973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__220);
  __Pyx_GIVEREF(__pyx_tuple__220);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_63Dust_calc_SolidAngle, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Dust_calc_SolidAngle, __pyx_t_2) < 0) __PYX_ERR(0, 4973, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__221 = (PyObject*)__Pyx_PyCode_New(14, 0, 27, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__220, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_Dust_calc_SolidAngle, 4973, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__221)) __PYX_ERR(0, 4973, __pyx_L1_error)
+4974:                          approx=True, out_coefonly=False,
    values[3] = ((PyObject *)Py_True);
    values[4] = ((PyObject *)Py_False);
    values[5] = ((PyObject *)__pyx_n_s_Tor);
+4975:                          VType='Tor', VPoly=None, VIn=None, VLim=None,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
+4976:                          LSPoly=None, LSLim=None, LSVIn=None, Forbid=True,
    values[9] = ((PyObject *)Py_None);
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_None);
    values[12] = ((PyObject *)Py_True);
+4977:                          Test=True):
    values[13] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pos)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_r)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Dust_calc_SolidAngle", 0, 3, 14, 1); __PYX_ERR(0, 4973, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pts)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("Dust_calc_SolidAngle", 0, 3, 14, 2); __PYX_ERR(0, 4973, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_approx);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_out_coefonly);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VType);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VLim);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSPoly);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSLim);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSVIn);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Forbid);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[13] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "Dust_calc_SolidAngle") < 0)) __PYX_ERR(0, 4973, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_pos = values[0];
    __pyx_v_r = values[1];
    __pyx_v_pts = values[2];
    __pyx_v_approx = values[3];
    __pyx_v_out_coefonly = values[4];
    __pyx_v_VType = values[5];
    __pyx_v_VPoly = values[6];
    __pyx_v_VIn = values[7];
    __pyx_v_VLim = values[8];
    __pyx_v_LSPoly = values[9];
    __pyx_v_LSLim = values[10];
    __pyx_v_LSVIn = values[11];
    __pyx_v_Forbid = values[12];
    __pyx_v_Test = values[13];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("Dust_calc_SolidAngle", 0, 3, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 4973, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.Dust_calc_SolidAngle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_62Dust_calc_SolidAngle(__pyx_self, __pyx_v_pos, __pyx_v_r, __pyx_v_pts, __pyx_v_approx, __pyx_v_out_coefonly, __pyx_v_VType, __pyx_v_VPoly, __pyx_v_VIn, __pyx_v_VLim, __pyx_v_LSPoly, __pyx_v_LSLim, __pyx_v_LSVIn, __pyx_v_Forbid, __pyx_v_Test);
 4978:     """ Compute the solid angle of a moving particle of varying radius as seen
 4979:     from any number of pixed points
 4980: 
 4981:     Can be done w/o the approximation that r<<d
 4982:     If Ves (and optionally LSPoly) are provided, takes into account vignetting
 4983:     """
+4984:     cdef block = VPoly is not None
  __pyx_t_1 = (__pyx_v_VPoly != Py_None);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4984, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_block = __pyx_t_2;
  __pyx_t_2 = 0;
 4985:     cdef float pir2
+4986:     cdef int ii, jj, nptsok, nt=pos.shape[1], npts=pts.shape[1]
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pos, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_nt = __pyx_t_4;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_pts, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4986, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_npts = __pyx_t_4;
+4987:     cdef np.ndarray[double, ndim=2, mode='c'] sang=np.zeros((nt,npts))
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_nt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_npts); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 4987, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_sang.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_sang = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_sang.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 4987, __pyx_L1_error)
    } else {__pyx_pybuffernd_sang.diminfo[0].strides = __pyx_pybuffernd_sang.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_sang.diminfo[0].shape = __pyx_pybuffernd_sang.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_sang.diminfo[1].strides = __pyx_pybuffernd_sang.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_sang.diminfo[1].shape = __pyx_pybuffernd_sang.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_sang = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
 4988: 
+4989:     if block:
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_block); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 4989, __pyx_L1_error)
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+4990:         ind = ~_Ves_isInside(pts, VPoly, Lim=VLim, VType=VType,
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Ves_isInside); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_v_pts);
    __Pyx_GIVEREF(__pyx_v_pts);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pts);
    __Pyx_INCREF(__pyx_v_VPoly);
    __Pyx_GIVEREF(__pyx_v_VPoly);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_VPoly);
    __pyx_t_7 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Lim, __pyx_v_VLim) < 0) __PYX_ERR(0, 4990, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_VType, __pyx_v_VType) < 0) __PYX_ERR(0, 4990, __pyx_L1_error)
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_In, __pyx_kp_s_X_Y_Z) < 0) __PYX_ERR(0, 4990, __pyx_L1_error)
/* … */
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_7 = PyNumber_Invert(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_ind = __pyx_t_7;
    __pyx_t_7 = 0;
+4991:                              In='(X,Y,Z)', Test=Test)
    if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Test, __pyx_v_Test) < 0) __PYX_ERR(0, 4990, __pyx_L1_error)
+4992:         if LSPoly is not None:
    __pyx_t_1 = (__pyx_v_LSPoly != Py_None);
    __pyx_t_9 = (__pyx_t_1 != 0);
    if (__pyx_t_9) {
/* … */
    }
+4993:             for ii in range(0,len(LSPoly)):
      __pyx_t_10 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4993, __pyx_L1_error)
      __pyx_t_11 = __pyx_t_10;
      for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_11; __pyx_t_4+=1) {
        __pyx_v_ii = __pyx_t_4;
+4994:                 ind = ind & _Ves_isInside(pts, LSPoly[ii], Lim=LSLim[ii],
        __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_Ves_isInside); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_LSPoly, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_v_pts);
        __Pyx_GIVEREF(__pyx_v_pts);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_pts);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_Lim, __pyx_t_2) < 0) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyNumber_And(__pyx_v_ind, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4994, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF_SET(__pyx_v_ind, __pyx_t_6);
        __pyx_t_6 = 0;
      }
+4995:                                           VType=VType, In='(X,Y,Z)', Test=Test)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_VType, __pyx_v_VType) < 0) __PYX_ERR(0, 4994, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_In, __pyx_kp_s_X_Y_Z) < 0) __PYX_ERR(0, 4994, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_Test, __pyx_v_Test) < 0) __PYX_ERR(0, 4994, __pyx_L1_error)
+4996:         ind = (~ind).nonzero()[0]
    __pyx_t_2 = PyNumber_Invert(__pyx_v_ind); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_nonzero); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4996, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_ind, __pyx_t_5);
    __pyx_t_5 = 0;
+4997:         ptstemp = np.ascontiguousarray(pts[:,ind])
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_slice__8);
    __Pyx_GIVEREF(__pyx_slice__8);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_slice__8);
    __Pyx_INCREF(__pyx_v_ind);
    __Pyx_GIVEREF(__pyx_v_ind);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_ind);
    __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4997, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_ptstemp = __pyx_t_5;
    __pyx_t_5 = 0;
+4998:         nptsok = ind.size
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_ind, __pyx_n_s_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4998, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_v_nptsok = __pyx_t_4;
 4999: 
+5000:         if approx and out_coefonly:
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_approx); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 5000, __pyx_L1_error)
    if (__pyx_t_1) {
    } else {
      __pyx_t_9 = __pyx_t_1;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_out_coefonly); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 5000, __pyx_L1_error)
    __pyx_t_9 = __pyx_t_1;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_9) {
/* … */
      goto __pyx_L7;
    }
+5001:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5002:                 k = np.sqrt((pos[0,ii]-ptstemp[0,:])**2
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__36); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5003:                             + (pos[1,ii]-ptstemp[1,:])**2
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__42); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_14 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Power(__pyx_t_14, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5003, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5004:                             + (pos[2,ii]-ptstemp[2,:])**2)
        __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_2);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
        __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__32); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = PyNumber_Subtract(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Add(__pyx_t_14, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5004, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
          }
        }
        __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_6, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5002, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
        __pyx_t_5 = 0;
 5005: 
+5006:                 vis = LOS_isVis_PtFromPts_VesStruct(pos[0,ii], pos[1,ii],
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
        __pyx_t_14 = PyTuple_New(7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_t_6);
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_v_k);
        __Pyx_INCREF(__pyx_v_ptstemp);
        __Pyx_GIVEREF(__pyx_v_ptstemp);
        PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_v_ptstemp);
        __Pyx_INCREF(__pyx_v_VPoly);
        __Pyx_GIVEREF(__pyx_v_VPoly);
        PyTuple_SET_ITEM(__pyx_t_14, 5, __pyx_v_VPoly);
        __Pyx_INCREF(__pyx_v_VIn);
        __Pyx_GIVEREF(__pyx_v_VIn);
        PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_v_VIn);
        __pyx_t_7 = 0;
        __pyx_t_3 = 0;
        __pyx_t_6 = 0;
/* … */
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_14, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5006, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF_SET(__pyx_v_vis, __pyx_t_3);
        __pyx_t_3 = 0;
+5007:                                                     pos[2,ii], k, ptstemp,
        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5007, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5007, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5007, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+5008:                                                     VPoly, VIn, Lim=VLim,
        __pyx_t_6 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5008, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_Lim, __pyx_v_VLim) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
+5009:                                                     LSPoly=LSPoly, LSLim=LSLim,
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_LSPoly, __pyx_v_LSPoly) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_LSLim, __pyx_v_LSLim) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
+5010:                                                     LSVIn=LSVIn, Forbid=Forbid,
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_LSVIn, __pyx_v_LSVIn) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_Forbid, __pyx_v_Forbid) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
+5011:                                                     VType=VType, Test=Test)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_VType, __pyx_v_VType) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_Test, __pyx_v_Test) < 0) __PYX_ERR(0, 5008, __pyx_L1_error)
+5012:                 for jj in range(0,nptsok):
        __pyx_t_15 = __pyx_v_nptsok;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5013:                     if vis[jj]:
          __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_vis, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5013, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5013, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (__pyx_t_9) {
/* … */
          }
        }
      }
+5014:                         sang[ii,ind[jj]] = Cpi/k[jj]**2
            __pyx_t_3 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_k, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_14 = PyNumber_Power(__pyx_t_6, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_14); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_ind, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_14);
            __Pyx_GIVEREF(__pyx_t_3);
            PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
            __pyx_t_14 = 0;
            __pyx_t_3 = 0;
            if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sang), __pyx_t_5, __pyx_t_6) < 0)) __PYX_ERR(0, 5014, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5015:         elif approx:
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_approx); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5015, __pyx_L1_error)
    if (__pyx_t_9) {
/* … */
      goto __pyx_L7;
    }
+5016:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5017:                 k = np.sqrt((pos[0,ii]-ptstemp[0,:])**2
        __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__36); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5018:                             + (pos[1,ii]-ptstemp[1,:])**2
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__42); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_2 = PyNumber_Subtract(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Add(__pyx_t_14, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5018, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5019:                             + (pos[2,ii]-ptstemp[2,:])**2)
        __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_5);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_5);
        __pyx_t_5 = 0;
        __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__32); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5019, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
          __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_3);
          if (likely(__pyx_t_14)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
            __Pyx_INCREF(__pyx_t_14);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_3, function);
          }
        }
        __pyx_t_6 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_14, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_7);
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5017, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6);
        __pyx_t_6 = 0;
 5020: 
+5021:                 vis = LOS_isVis_PtFromPts_VesStruct(pos[0,ii], pos[1,ii],
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
        __pyx_t_2 = PyTuple_New(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_14);
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_k);
        __Pyx_INCREF(__pyx_v_ptstemp);
        __Pyx_GIVEREF(__pyx_v_ptstemp);
        PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_ptstemp);
        __Pyx_INCREF(__pyx_v_VPoly);
        __Pyx_GIVEREF(__pyx_v_VPoly);
        PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_v_VPoly);
        __Pyx_INCREF(__pyx_v_VIn);
        __Pyx_GIVEREF(__pyx_v_VIn);
        PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_v_VIn);
        __pyx_t_3 = 0;
        __pyx_t_7 = 0;
        __pyx_t_14 = 0;
/* … */
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_14); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5021, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF_SET(__pyx_v_vis, __pyx_t_7);
        __pyx_t_7 = 0;
+5022:                                                     pos[2,ii], k, ptstemp,
        __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_14);
        __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5022, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5023:                                                     VPoly, VIn, Lim=VLim,
        __pyx_t_14 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5023, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_Lim, __pyx_v_VLim) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
+5024:                                                     LSPoly=LSPoly, LSLim=LSLim,
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_LSPoly, __pyx_v_LSPoly) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_LSLim, __pyx_v_LSLim) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
+5025:                                                     LSVIn=LSVIn, Forbid=Forbid,
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_LSVIn, __pyx_v_LSVIn) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_Forbid, __pyx_v_Forbid) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
+5026:                                                     VType=VType, Test=Test)
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_VType, __pyx_v_VType) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_Test, __pyx_v_Test) < 0) __PYX_ERR(0, 5023, __pyx_L1_error)
+5027:                 pir2 = Cpi*r[ii]**2
        __pyx_t_7 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5027, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_r, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5027, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_2 = PyNumber_Power(__pyx_t_14, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5027, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyNumber_Multiply(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5027, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_18 = __pyx_PyFloat_AsFloat(__pyx_t_14); if (unlikely((__pyx_t_18 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 5027, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_v_pir2 = __pyx_t_18;
+5028:                 for jj in range(0,nptsok):
        __pyx_t_15 = __pyx_v_nptsok;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5029:                     if vis[jj]:
          __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_vis, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5029, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5029, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          if (__pyx_t_9) {
/* … */
          }
        }
      }
+5030:                         sang[ii,ind[jj]] = pir2/k[jj]**2
            __pyx_t_14 = PyFloat_FromDouble(__pyx_v_pir2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_k, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_7 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_14, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_14 = __Pyx_GetItemInt(__pyx_v_ind, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7);
            __Pyx_GIVEREF(__pyx_t_14);
            PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_14);
            __pyx_t_7 = 0;
            __pyx_t_14 = 0;
            if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sang), __pyx_t_6, __pyx_t_2) < 0)) __PYX_ERR(0, 5030, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5031:         else:
+5032:             pir2 = 2*Cpi
    /*else*/ {
      __pyx_v_pir2 = (2.0 * M_PI);
+5033:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5034:                 k = np.sqrt((pos[0,ii]-ptstemp[0,:])**2
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__36); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyNumber_Subtract(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5035:                             + (pos[1,ii]-ptstemp[1,:])**2
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__42); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_5 = PyNumber_Subtract(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyNumber_Power(__pyx_t_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Add(__pyx_t_7, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5035, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5036:                             + (pos[2,ii]-ptstemp[2,:])**2)
        __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_ptstemp, __pyx_tuple__32); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyNumber_Subtract(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Add(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5036, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_7)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_7);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
          }
        }
        __pyx_t_2 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_7, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5034, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_2);
        __pyx_t_2 = 0;
 5037: 
+5038:                 vis = LOS_isVis_PtFromPts_VesStruct(pos[0,ii], pos[1,ii],
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_LOS_isVis_PtFromPts_VesStruct); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_INCREF(__pyx_int_0);
        __Pyx_GIVEREF(__pyx_int_0);
        PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_14);
        __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_3); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_int_1);
        __Pyx_GIVEREF(__pyx_int_1);
        PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_1);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
        __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
/* … */
        __pyx_t_5 = PyTuple_New(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_14);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_14);
        __Pyx_GIVEREF(__pyx_t_3);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_7);
        __Pyx_INCREF(__pyx_v_k);
        __Pyx_GIVEREF(__pyx_v_k);
        PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_k);
        __Pyx_INCREF(__pyx_v_ptstemp);
        __Pyx_GIVEREF(__pyx_v_ptstemp);
        PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_v_ptstemp);
        __Pyx_INCREF(__pyx_v_VPoly);
        __Pyx_GIVEREF(__pyx_v_VPoly);
        PyTuple_SET_ITEM(__pyx_t_5, 5, __pyx_v_VPoly);
        __Pyx_INCREF(__pyx_v_VIn);
        __Pyx_GIVEREF(__pyx_v_VIn);
        PyTuple_SET_ITEM(__pyx_t_5, 6, __pyx_v_VIn);
        __pyx_t_14 = 0;
        __pyx_t_3 = 0;
        __pyx_t_7 = 0;
/* … */
        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5038, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF_SET(__pyx_v_vis, __pyx_t_3);
        __pyx_t_3 = 0;
+5039:                                                     pos[2,ii], k, ptstemp,
        __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5039, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5039, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_INCREF(__pyx_int_2);
        __Pyx_GIVEREF(__pyx_int_2);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_2);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5039, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5040:                                                     VPoly, VIn, Lim=VLim,
        __pyx_t_7 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5040, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Lim, __pyx_v_VLim) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
+5041:                                                     LSPoly=LSPoly, LSLim=LSLim,
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_LSPoly, __pyx_v_LSPoly) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_LSLim, __pyx_v_LSLim) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
+5042:                                                     LSVIn=LSVIn, Forbid=Forbid,
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_LSVIn, __pyx_v_LSVIn) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Forbid, __pyx_v_Forbid) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
+5043:                                                     VType=VType, Test=Test)
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_VType, __pyx_v_VType) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_Test, __pyx_v_Test) < 0) __PYX_ERR(0, 5040, __pyx_L1_error)
+5044:                 for jj in range(0,nptsok):
        __pyx_t_15 = __pyx_v_nptsok;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5045:                     if vis[jj]:
          __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_vis, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5045, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5045, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (__pyx_t_9) {
/* … */
          }
        }
      }
    }
    __pyx_L7:;
+5046:                         sang[ii,ind[jj]] = pir2*(1-Csqrt(1-r[ii]**2/k[jj]**2))
            __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_r, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_7 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_k, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_5 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_3, 1, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = PyFloat_FromDouble((__pyx_v_pir2 * (1.0 - sqrt(__pyx_t_19)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_ind, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_7);
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_GIVEREF(__pyx_t_3);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
            __Pyx_GIVEREF(__pyx_t_7);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_7);
            __pyx_t_3 = 0;
            __pyx_t_7 = 0;
            if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_sang), __pyx_t_2, __pyx_t_5) < 0)) __PYX_ERR(0, 5046, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5047: 
 5048:     else:
+5049:         if approx and out_coefonly:
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_approx); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 5049, __pyx_L1_error)
    if (__pyx_t_1) {
    } else {
      __pyx_t_9 = __pyx_t_1;
      goto __pyx_L26_bool_binop_done;
    }
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_out_coefonly); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 5049, __pyx_L1_error)
    __pyx_t_9 = __pyx_t_1;
    __pyx_L26_bool_binop_done:;
    if (__pyx_t_9) {
/* … */
      goto __pyx_L25;
    }
+5050:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5051:                 for jj in range(0,npts):
        __pyx_t_15 = __pyx_v_npts;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5052:                     dij2 = ((pos[0,ii]-pts[0,jj])**2
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5052, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5053:                             + (pos[1,ii]-pts[1,jj])**2
          __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_int_1);
          __Pyx_GIVEREF(__pyx_int_1);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_1);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_int_1);
          __Pyx_GIVEREF(__pyx_int_1);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_1);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = PyNumber_Subtract(__pyx_t_7, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5053, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5054:                             + (pos[2,ii]-pts[2,jj])**2)
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_2);
          __Pyx_GIVEREF(__pyx_int_2);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_2);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_2);
          __Pyx_GIVEREF(__pyx_int_2);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_2);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Add(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5054, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_dij2, __pyx_t_7);
          __pyx_t_7 = 0;
+5055:                     sang[ii,jj] = Cpi/dij2
          __pyx_t_7 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_7, __pyx_v_dij2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5055, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5055, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_20 = __pyx_v_ii;
          __pyx_t_21 = __pyx_v_jj;
          *__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_sang.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_sang.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_sang.diminfo[1].strides) = __pyx_t_19;
        }
      }
+5056:         elif approx:
    __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_approx); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 5056, __pyx_L1_error)
    if (__pyx_t_9) {
/* … */
      goto __pyx_L25;
    }
+5057:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5058:                 pir2 = Cpi*r[ii]**2
        __pyx_t_2 = PyFloat_FromDouble(M_PI); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5058, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_r, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5058, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_3 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5058, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = PyNumber_Multiply(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5058, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_18 = __pyx_PyFloat_AsFloat(__pyx_t_7); if (unlikely((__pyx_t_18 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 5058, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_v_pir2 = __pyx_t_18;
+5059:                 for jj in range(0,npts):
        __pyx_t_15 = __pyx_v_npts;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5060:                     dij2 = ((pos[0,ii]-pts[0,jj])**2
          __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Subtract(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5060, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+5061:                             + (pos[0,ii]-pts[0,jj])**2
          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Subtract(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Power(__pyx_t_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Add(__pyx_t_3, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5061, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+5062:                             + (pos[0,ii]-pts[0,jj])**2)
          __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_7);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
          __pyx_t_7 = 0;
          __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Subtract(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5062, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_XDECREF_SET(__pyx_v_dij2, __pyx_t_2);
          __pyx_t_2 = 0;
+5063:                     sang[ii,jj] = pir2/dij2
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_pir2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5063, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_dij2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5063, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5063, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_22 = __pyx_v_ii;
          __pyx_t_23 = __pyx_v_jj;
          *__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_sang.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_sang.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_sang.diminfo[1].strides) = __pyx_t_19;
        }
      }
 5064:         else:
+5065:             pir2 = 2*Cpi
    /*else*/ {
      __pyx_v_pir2 = (2.0 * M_PI);
+5066:             for ii in range(0,nt):
      __pyx_t_4 = __pyx_v_nt;
      __pyx_t_12 = __pyx_t_4;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+5067:                 for jj in range(0,npts):
        __pyx_t_15 = __pyx_v_npts;
        __pyx_t_16 = __pyx_t_15;
        for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
          __pyx_v_jj = __pyx_t_17;
+5068:                     dij2 = ((pos[0,ii]-pts[0,jj])**2
          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Power(__pyx_t_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5068, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5069:                             + (pos[0,ii]-pts[0,jj])**2
          __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_5);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
          __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Subtract(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = PyNumber_Power(__pyx_t_7, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_7 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5069, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5070:                             + (pos[0,ii]-pts[0,jj])**2)
          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_ii); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_v_pos, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_INCREF(__pyx_int_0);
          __Pyx_GIVEREF(__pyx_int_0);
          PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_0);
          __Pyx_GIVEREF(__pyx_t_2);
          PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
          __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pts, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Power(__pyx_t_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Add(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5070, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_dij2, __pyx_t_5);
          __pyx_t_5 = 0;
+5071:                     sang[ii,jj] = pir2*(1-Csqrt(1-r[ii]**2/dij2))
          __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_r, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyNumber_Power(__pyx_t_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_dij2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyInt_SubtractCObj(__pyx_int_1, __pyx_t_5, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5071, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5071, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_24 = __pyx_v_ii;
          __pyx_t_25 = __pyx_v_jj;
          *__Pyx_BufPtrCContig2d(double *, __pyx_pybuffernd_sang.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_sang.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_sang.diminfo[1].strides) = (__pyx_v_pir2 * (1.0 - sqrt(__pyx_t_19)));
        }
      }
    }
    __pyx_L25:;
  }
  __pyx_L3:;
+5072:     return sang
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_sang));
  __pyx_r = ((PyObject *)__pyx_v_sang);
  goto __pyx_L0;
 5073: 
 5074: # ==============================================================================
 5075: #
 5076: #                       VECTOR CALCULUS HELPERS
 5077: #
 5078: # ==============================================================================
+5079: cdef inline void compute_cross_prod(const double[3] vec_a,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(double *__pyx_v_vec_a, double *__pyx_v_vec_b, double *__pyx_v_res) {
/* … */
  /* function exit code */
  __pyx_L0:;
}
 5080:                                     const double[3] vec_b,
 5081:                                     double[3] res) nogil:
+5082:     res[0] = vec_a[1]*vec_b[2] - vec_a[2]*vec_b[1]
  (__pyx_v_res[0]) = (((__pyx_v_vec_a[1]) * (__pyx_v_vec_b[2])) - ((__pyx_v_vec_a[2]) * (__pyx_v_vec_b[1])));
+5083:     res[1] = vec_a[2]*vec_b[0] - vec_a[0]*vec_b[2]
  (__pyx_v_res[1]) = (((__pyx_v_vec_a[2]) * (__pyx_v_vec_b[0])) - ((__pyx_v_vec_a[0]) * (__pyx_v_vec_b[2])));
+5084:     res[2] = vec_a[0]*vec_b[1] - vec_a[1]*vec_b[0]
  (__pyx_v_res[2]) = (((__pyx_v_vec_a[0]) * (__pyx_v_vec_b[1])) - ((__pyx_v_vec_a[1]) * (__pyx_v_vec_b[0])));
+5085:     return
  goto __pyx_L0;
 5086: 
+5087: cdef inline double compute_dot_prod(const double[3] vec_a,
static CYTHON_INLINE double __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(double *__pyx_v_vec_a, double *__pyx_v_vec_b) {
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 5088:                                     const double[3] vec_b) nogil:
+5089:     return vec_a[0] * vec_b[0] + vec_a[1] * vec_b[1] + vec_a[2] * vec_b[2]
  __pyx_r = ((((__pyx_v_vec_a[0]) * (__pyx_v_vec_b[0])) + ((__pyx_v_vec_a[1]) * (__pyx_v_vec_b[1]))) + ((__pyx_v_vec_a[2]) * (__pyx_v_vec_b[2])));
  goto __pyx_L0;
 5090: 
 5091: 
+5092: cdef inline double compute_g(double s, double m2b2, double rm0sqr,
static CYTHON_INLINE double __pyx_f_4tofu_4geom_5_GG03_compute_g(double __pyx_v_s, double __pyx_v_m2b2, double __pyx_v_rm0sqr, double __pyx_v_m0sqr, double __pyx_v_b1sqr) {
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 5093:                              double m0sqr, double b1sqr) nogil:
+5094:     return s + m2b2 - rm0sqr*s / Csqrt(m0sqr*s*s + b1sqr)
  __pyx_r = ((__pyx_v_s + __pyx_v_m2b2) - ((__pyx_v_rm0sqr * __pyx_v_s) / sqrt((((__pyx_v_m0sqr * __pyx_v_s) * __pyx_v_s) + __pyx_v_b1sqr))));
  goto __pyx_L0;
 5095: 
+5096: cdef inline double compute_bisect(double m2b2, double rm0sqr,
static CYTHON_INLINE double __pyx_f_4tofu_4geom_5_GG03_compute_bisect(double __pyx_v_m2b2, double __pyx_v_rm0sqr, double __pyx_v_m0sqr, double __pyx_v_b1sqr, double __pyx_v_smin, double __pyx_v_smax) {
  int __pyx_v_maxIterations;
  double __pyx_v_root;
  CYTHON_UNUSED double __pyx_v_gmin;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 5097:                                   double m0sqr, double b1sqr,
 5098:                                   double smin, double smax) nogil:
+5099:     cdef int maxIterations = 10000
  __pyx_v_maxIterations = 0x2710;
+5100:     cdef double root = 0.
  __pyx_v_root = 0.;
+5101:     root = compute_find(m2b2, rm0sqr, m0sqr, b1sqr,
  __pyx_v_root = __pyx_f_4tofu_4geom_5_GG03_compute_find(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, __pyx_v_smin, __pyx_v_smax, -1.0, 1.0, __pyx_v_maxIterations, __pyx_v_root);
 5102:                 smin, smax, -1.0, 1.0, maxIterations, root)
+5103:     gmin = compute_g(root, m2b2, rm0sqr, m0sqr, b1sqr)
  __pyx_v_gmin = __pyx_f_4tofu_4geom_5_GG03_compute_g(__pyx_v_root, __pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr);
+5104:     return root
  __pyx_r = __pyx_v_root;
  goto __pyx_L0;
 5105: 
+5106: cdef inline double compute_find(double m2b2, double rm0sqr,
static CYTHON_INLINE double __pyx_f_4tofu_4geom_5_GG03_compute_find(double __pyx_v_m2b2, double __pyx_v_rm0sqr, double __pyx_v_m0sqr, double __pyx_v_b1sqr, double __pyx_v_t0, double __pyx_v_t1, double __pyx_v_f0, double __pyx_v_f1, int __pyx_v_maxIterations, double __pyx_v_root) {
  double __pyx_v_fm;
  double __pyx_v_product;
  CYTHON_UNUSED long __pyx_v_i;
  double __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 5107:                                 double m0sqr, double b1sqr,
 5108:                                 double t0, double t1, double f0, double f1,
 5109:                                 int maxIterations, double root) nogil:
 5110:     cdef double fm, product
+5111:     if (t0 < t1):
  __pyx_t_1 = ((__pyx_v_t0 < __pyx_v_t1) != 0);
  if (__pyx_t_1) {
/* … */
  }
 5112:         # Test the endpoints to see whether F(t) is zero.
+5113:         if f0 == 0.:
    __pyx_t_1 = ((__pyx_v_f0 == 0.) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5114:             root = t0
      __pyx_v_root = __pyx_v_t0;
+5115:             return root
      __pyx_r = __pyx_v_root;
      goto __pyx_L0;
+5116:         if f1 == 0.:
    __pyx_t_1 = ((__pyx_v_f1 == 0.) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5117:             root = t1
      __pyx_v_root = __pyx_v_t1;
+5118:             return root
      __pyx_r = __pyx_v_root;
      goto __pyx_L0;
+5119:         if f0*f1 > 0.:
    __pyx_t_1 = (((__pyx_v_f0 * __pyx_v_f1) > 0.) != 0);
    if (__pyx_t_1) {
/* … */
    }
 5120:             # It is not known whether the interval bounds a root.
+5121:             return root
      __pyx_r = __pyx_v_root;
      goto __pyx_L0;
+5122:         for i in range(2, maxIterations+1):
    __pyx_t_2 = (__pyx_v_maxIterations + 1);
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 2; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+5123:             root = (0.5) * (t0 + t1)
      __pyx_v_root = (0.5 * (__pyx_v_t0 + __pyx_v_t1));
+5124:             if (root == t0 or root == t1):
      __pyx_t_5 = ((__pyx_v_root == __pyx_v_t0) != 0);
      if (!__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L10_bool_binop_done;
      }
      __pyx_t_5 = ((__pyx_v_root == __pyx_v_t1) != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L10_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
 5125:                 # The numbers t0 and t1 are consecutive floating-point
 5126:                 # numbers.
+5127:                 break
        goto __pyx_L8_break;
+5128:             fm = compute_g(root, m2b2, rm0sqr, m0sqr, b1sqr)
      __pyx_v_fm = __pyx_f_4tofu_4geom_5_GG03_compute_g(__pyx_v_root, __pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr);
+5129:             product = fm * f0
      __pyx_v_product = (__pyx_v_fm * __pyx_v_f0);
+5130:             if (product < 0.):
      __pyx_t_1 = ((__pyx_v_product < 0.) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L12;
      }
+5131:                 t1 = root
        __pyx_v_t1 = __pyx_v_root;
+5132:                 f1 = fm
        __pyx_v_f1 = __pyx_v_fm;
+5133:             elif (product > 0.):
      __pyx_t_1 = ((__pyx_v_product > 0.) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L12;
      }
+5134:                 t0 = root
        __pyx_v_t0 = __pyx_v_root;
+5135:                 f0 = fm
        __pyx_v_f0 = __pyx_v_fm;
 5136:             else:
+5137:                 break
      /*else*/ {
        goto __pyx_L8_break;
      }
      __pyx_L12:;
    }
    __pyx_L8_break:;
+5138:         return root
    __pyx_r = __pyx_v_root;
    goto __pyx_L0;
 5139:     else:
+5140:         return root
  /*else*/ {
    __pyx_r = __pyx_v_root;
    goto __pyx_L0;
  }
 5141: 
 5142: 
 5143: # ==============================================================================
 5144: #
 5145: #                       DISTANCE CIRCLE - LOS
 5146: #
 5147: # ==============================================================================
+5148: def comp_dist_los_circle(np.ndarray[double,ndim=1,mode='c'] ray_vdir,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_65comp_dist_los_circle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_64comp_dist_los_circle[] = "\n    This function computes the intersection of a Ray (or Line Of Sight)\n    and a circle in 3D. It returns `kmin` and `dist`. Where `kmin` is the\n    coefficient such that the ray of origin O = [ori1, ori2, ori3]\n    and of directional vector D = [dir1, dir2, dir3] is closest to the circle\n     of radius `radius` and centered `(0, 0, circ_z)` at the point\n    P = O + kmin * D.\n    And `distance` the distance between the two closest points (line closest\n    and circle closest)\n    The variable `norm_dir` is the squared norm of the direction of the ray.\n    Params\n    =====\n    ray_vdir: (3) double array\n        ray's director vector V such that P \\in Ray iff P(t) = O + t*V\n    ray_orig : (3) double array\n        ray's origin coordinates O such that P \\in Ray iff P(t) = O + t*V\n    radius : double\n        radius r of horizontal circle centered in (0,0,circ_z)\n    circ_z : double\n        3rd coordinate of horizontal circle centered in (0,0,circ_z) of radius r\n    norm_dir : double (optional)\n        If for computation reasons it makes sense, you can pass the norm of the\n        director vector\n    Returns\n    =======\n    result : double (2) array\n       - result[0] will contain the k coefficient to find the line point closest\n       closest point\n       - result[1] will contain the DISTANCE from line closest point to circle\n       to the circle\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `dist_los_circle_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_65comp_dist_los_circle = {"comp_dist_los_circle", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_65comp_dist_los_circle, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_64comp_dist_los_circle};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_65comp_dist_los_circle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ray_orig = 0;
  double __pyx_v_radius;
  double __pyx_v_circ_z;
  double __pyx_v_norm_dir;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_circle (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ray_vdir,&__pyx_n_s_ray_orig,&__pyx_n_s_radius,&__pyx_n_s_circ_z,&__pyx_n_s_norm_dir,0};
    PyObject* values[5] = {0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle", 0, 4, 5, 1); __PYX_ERR(0, 5148, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radius)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle", 0, 4, 5, 2); __PYX_ERR(0, 5148, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circ_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle", 0, 4, 5, 3); __PYX_ERR(0, 5148, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_norm_dir);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "comp_dist_los_circle") < 0)) __PYX_ERR(0, 5148, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ray_vdir = ((PyArrayObject *)values[0]);
    __pyx_v_ray_orig = ((PyArrayObject *)values[1]);
    __pyx_v_radius = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_radius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5150, __pyx_L3_error)
    __pyx_v_circ_z = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_circ_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5150, __pyx_L3_error)
    if (values[4]) {
      __pyx_v_norm_dir = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_norm_dir == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5150, __pyx_L3_error)
    } else {
      __pyx_v_norm_dir = ((double)-1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5148, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_circle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 5148, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 5149, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_64comp_dist_los_circle(__pyx_self, __pyx_v_ray_vdir, __pyx_v_ray_orig, __pyx_v_radius, __pyx_v_circ_z, __pyx_v_norm_dir);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_64comp_dist_los_circle(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ray_orig, double __pyx_v_radius, double __pyx_v_circ_z, double __pyx_v_norm_dir) {
  double __pyx_v_res[2];
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_circle", 0);
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5148, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5148, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_circle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__222 = PyTuple_Pack(6, __pyx_n_s_ray_vdir, __pyx_n_s_ray_orig, __pyx_n_s_radius, __pyx_n_s_circ_z, __pyx_n_s_norm_dir, __pyx_n_s_res); if (unlikely(!__pyx_tuple__222)) __PYX_ERR(0, 5148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__222);
  __Pyx_GIVEREF(__pyx_tuple__222);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_65comp_dist_los_circle, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comp_dist_los_circle, __pyx_t_2) < 0) __PYX_ERR(0, 5148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__223 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__222, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_comp_dist_los_circle, 5148, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__223)) __PYX_ERR(0, 5148, __pyx_L1_error)
 5149:                          np.ndarray[double,ndim=1,mode='c'] ray_orig,
 5150:                          double radius, double circ_z, double norm_dir=-1.0):
 5151:     """
 5152:     This function computes the intersection of a Ray (or Line Of Sight)
 5153:     and a circle in 3D. It returns `kmin` and `dist`. Where `kmin` is the
 5154:     coefficient such that the ray of origin O = [ori1, ori2, ori3]
 5155:     and of directional vector D = [dir1, dir2, dir3] is closest to the circle
 5156:      of radius `radius` and centered `(0, 0, circ_z)` at the point
 5157:     P = O + kmin * D.
 5158:     And `distance` the distance between the two closest points (line closest
 5159:     and circle closest)
 5160:     The variable `norm_dir` is the squared norm of the direction of the ray.
 5161:     Params
 5162:     =====
 5163:     ray_vdir: (3) double array
 5164:         ray's director vector V such that P \in Ray iff P(t) = O + t*V
 5165:     ray_orig : (3) double array
 5166:         ray's origin coordinates O such that P \in Ray iff P(t) = O + t*V
 5167:     radius : double
 5168:         radius r of horizontal circle centered in (0,0,circ_z)
 5169:     circ_z : double
 5170:         3rd coordinate of horizontal circle centered in (0,0,circ_z) of radius r
 5171:     norm_dir : double (optional)
 5172:         If for computation reasons it makes sense, you can pass the norm of the
 5173:         director vector
 5174:     Returns
 5175:     =======
 5176:     result : double (2) array
 5177:        - result[0] will contain the k coefficient to find the line point closest
 5178:        closest point
 5179:        - result[1] will contain the DISTANCE from line closest point to circle
 5180:        to the circle
 5181:     ---
 5182:     This is the PYTHON function, use only if you need this computation from
 5183:     Python, if you need it from Cython, use `dist_los_circle_core`
 5184:     """
 5185:     cdef double[2] res
+5186:     dist_los_circle_core(<double*>ray_vdir.data,
  __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(((double *)__pyx_v_ray_vdir->data), ((double *)__pyx_v_ray_orig->data), __pyx_v_radius, __pyx_v_circ_z, __pyx_v_norm_dir, __pyx_v_res);
 5187:                          <double*>ray_orig.data,
 5188:                          radius, circ_z, norm_dir, res)
+5189:     return np.asarray(res)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_carray_to_py_double(__pyx_v_res, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5190: 
+5191: cdef inline void dist_los_circle_core(const double[3] direct,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(double *__pyx_v_direct, double *__pyx_v_origin, double const __pyx_v_radius, double const __pyx_v_circ_z, double __pyx_v_norm_dir, double *__pyx_v_result) {
  int __pyx_v_numRoots;
  int __pyx_v_i;
  double __pyx_v_zero;
  double __pyx_v_m0sqr;
  double __pyx_v_m0;
  double __pyx_v_rm0;
  double __pyx_v_lambd;
  double __pyx_v_m2b2;
  double __pyx_v_b1sqr;
  double __pyx_v_b1;
  double __pyx_v_twoThirds;
  double __pyx_v_sHat;
  double __pyx_v_gHat;
  double __pyx_v_cutoff;
  double __pyx_v_s;
  double __pyx_v_D[3];
  double __pyx_v_MxN[3];
  double __pyx_v_DxN[3];
  double __pyx_v_NxDelta[3];
  double __pyx_v_circle_normal[3];
  double __pyx_v_roots[3];
  double __pyx_v_diff[3];
  double __pyx_v_direction[3];
  double __pyx_v_line_closest[3];
  double __pyx_v_circle_center[3];
  double __pyx_v_circle_closest[3];
  double __pyx_v_tmin;
  double __pyx_v_distance;
  double __pyx_v_inv_norm_dir;
  double __pyx_v_rm0sqr;
  double __pyx_v_t;
  double __pyx_v_norm_ppar;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 5192:                                       const double[3] origin,
 5193:                                       const double radius, const double circ_z,
 5194:                                       double norm_dir,
 5195:                                       double[2] result) nogil:
 5196:     """
 5197:     This function computes the intersection of a Ray (or Line Of Sight)
 5198:     and a horizontal circle in 3. It returns `kmin` the coefficient such that
 5199:     the ray of origin O = [ori1, ori2, ori3] and of directional vector
 5200:     D = [dir1, dir2, dir3] is closest to the circle of radius `radius`,
 5201:     center `(0, 0, circ_z)` and of normal (0,0,1) at the point P = O + kmin * D.
 5202:     And `distance` the distance between the two closest points
 5203:     The variable `norm_dir` is the norm of the direction of the ray.
 5204:     if you haven't normalized the ray (and for optimization reasons you dont
 5205:     want to, you can pass norm_dir = -1
 5206:     ---
 5207:     Source: https://www.geometrictools.com/Documentation/DistanceToCircle3.pdf
 5208:     The line is P(t) = B+t*M.  The circle is |X-C| = r with Dot(N,X-C)=0.
 5209: 
 5210:     Params
 5211:     ======
 5212:     direct : double (3) array
 5213:        directional vector of the ray
 5214:     origin : double (3) array
 5215:        origin of the array (in 3d)
 5216:     radius : double
 5217:        radius of the circle
 5218:     circ_z : double
 5219:        3rd coordinate of the center of the circle
 5220:        ie. the circle center is (0,0, circ_z)
 5221:     norm_dir : double (3) array
 5222:        normal of the direction of the vector (for computation performance)
 5223:     result : double (2) array
 5224:        - result[0] will contain the k coefficient to find the line point closest
 5225:        closest point
 5226:        - result[1] will contain the DISTANCE from line closest point to circle
 5227:        to the circle
 5228:     """
 5229:     cdef int numRoots, i
+5230:     cdef double zero = 0., m0sqr, m0, rm0
  __pyx_v_zero = 0.;
 5231:     cdef double lambd, m2b2, b1sqr, b1, r0sqr, twoThirds, sHat, gHat, cutoff, s
 5232:     cdef double[3] D
 5233:     cdef double[3] MxN
 5234:     cdef double[3] DxN
 5235:     cdef double[3] NxDelta
 5236:     cdef double[3] circle_normal
 5237:     cdef double[3] roots
 5238:     cdef double[3] diff
 5239:     cdef double[3] direction
 5240:     cdef double[3] line_closest
 5241:     cdef double[3] circle_center
 5242:     cdef double[3] circle_closest
 5243:     cdef double tmin
 5244:     cdef double distance
 5245:     cdef double inv_norm_dir
 5246: 
+5247:     if norm_dir < 0:
  __pyx_t_1 = ((__pyx_v_norm_dir < 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+5248:         norm_dir = Csqrt(compute_dot_prod(direct, direct))
    __pyx_v_norm_dir = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direct, __pyx_v_direct));
+5249:     inv_norm_dir = 1./ norm_dir
  __pyx_v_inv_norm_dir = (1. / __pyx_v_norm_dir);
 5250:     # .. initialization .....
+5251:     for i in range(3):
  for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
    __pyx_v_i = __pyx_t_2;
+5252:         circle_center[i] = 0.
    (__pyx_v_circle_center[__pyx_v_i]) = 0.;
+5253:         circle_normal[i] = 0.
    (__pyx_v_circle_normal[__pyx_v_i]) = 0.;
+5254:         roots[i] = 0.
    (__pyx_v_roots[__pyx_v_i]) = 0.;
 5255:         # we normalize direction
+5256:         direction[i] = direct[i] * inv_norm_dir
    (__pyx_v_direction[__pyx_v_i]) = ((__pyx_v_direct[__pyx_v_i]) * __pyx_v_inv_norm_dir);
  }
+5257:     circle_normal[2] = 1
  (__pyx_v_circle_normal[2]) = 1.0;
+5258:     circle_center[2] = circ_z
  (__pyx_v_circle_center[2]) = __pyx_v_circ_z;
 5259: 
+5260:     D[0] = origin[0]
  (__pyx_v_D[0]) = (__pyx_v_origin[0]);
+5261:     D[1] = origin[1]
  (__pyx_v_D[1]) = (__pyx_v_origin[1]);
+5262:     D[2] = origin[2] - circ_z
  (__pyx_v_D[2]) = ((__pyx_v_origin[2]) - __pyx_v_circ_z);
+5263:     compute_cross_prod(direction, circle_normal, MxN)
  __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_direction, __pyx_v_circle_normal, __pyx_v_MxN);
+5264:     compute_cross_prod(D, circle_normal, DxN)
  __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_D, __pyx_v_circle_normal, __pyx_v_DxN);
+5265:     m0sqr = compute_dot_prod(MxN, MxN)
  __pyx_v_m0sqr = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_MxN, __pyx_v_MxN);
 5266: 
+5267:     if (m0sqr > zero):
  __pyx_t_1 = ((__pyx_v_m0sqr > __pyx_v_zero) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
 5268:         # Compute the critical points s for F'(s) = 0.
+5269:         numRoots = 0
    __pyx_v_numRoots = 0;
 5270: 
 5271:         # The line direction M and the plane normal N are not parallel.  Move
 5272:         # the line origin B = (b0,b1,b2) to B' = B + lambd*direction =
 5273:         # (0,b1',b2').
+5274:         m0 = Csqrt(m0sqr)
    __pyx_v_m0 = sqrt(__pyx_v_m0sqr);
+5275:         rm0 = radius * m0
    __pyx_v_rm0 = (__pyx_v_radius * __pyx_v_m0);
+5276:         lambd = -compute_dot_prod(MxN, DxN) / m0sqr
    __pyx_v_lambd = ((-__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_MxN, __pyx_v_DxN)) / __pyx_v_m0sqr);
+5277:         for i in range(3):
    for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
      __pyx_v_i = __pyx_t_2;
+5278:             D[i] += lambd * direction[i]
      __pyx_t_3 = __pyx_v_i;
      (__pyx_v_D[__pyx_t_3]) = ((__pyx_v_D[__pyx_t_3]) + (__pyx_v_lambd * (__pyx_v_direction[__pyx_v_i])));
+5279:             DxN[i] += lambd * MxN[i]
      __pyx_t_3 = __pyx_v_i;
      (__pyx_v_DxN[__pyx_t_3]) = ((__pyx_v_DxN[__pyx_t_3]) + (__pyx_v_lambd * (__pyx_v_MxN[__pyx_v_i])));
    }
+5280:         m2b2 = compute_dot_prod(direction, D)
    __pyx_v_m2b2 = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direction, __pyx_v_D);
+5281:         b1sqr = compute_dot_prod(DxN, DxN)
    __pyx_v_b1sqr = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_DxN, __pyx_v_DxN);
+5282:         if (b1sqr > zero) :
    __pyx_t_1 = ((__pyx_v_b1sqr > __pyx_v_zero) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L9;
    }
 5283:             # B' = (0,b1',b2') where b1' != 0.  See Sections 1.1.2 and 1.2.2
 5284:             # of the PDF documentation.
+5285:             b1 = Csqrt(b1sqr)
      __pyx_v_b1 = sqrt(__pyx_v_b1sqr);
+5286:             rm0sqr = radius * m0sqr
      __pyx_v_rm0sqr = (__pyx_v_radius * __pyx_v_m0sqr);
+5287:             if (rm0sqr > b1):
      __pyx_t_1 = ((__pyx_v_rm0sqr > __pyx_v_b1) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L10;
      }
+5288:                 twoThirds = 2.0 / 3.0
        __pyx_v_twoThirds = (2.0 / 3.0);
+5289:                 sHat = Csqrt((rm0sqr * b1sqr)**twoThirds - b1sqr) / m0
        __pyx_v_sHat = (sqrt((pow((__pyx_v_rm0sqr * __pyx_v_b1sqr), __pyx_v_twoThirds) - __pyx_v_b1sqr)) / __pyx_v_m0);
+5290:                 gHat = rm0sqr * sHat / Csqrt(m0sqr * sHat * sHat + b1sqr)
        __pyx_v_gHat = ((__pyx_v_rm0sqr * __pyx_v_sHat) / sqrt((((__pyx_v_m0sqr * __pyx_v_sHat) * __pyx_v_sHat) + __pyx_v_b1sqr)));
+5291:                 cutoff = gHat - sHat
        __pyx_v_cutoff = (__pyx_v_gHat - __pyx_v_sHat);
+5292:                 if (m2b2 <= -cutoff):
        __pyx_t_1 = ((__pyx_v_m2b2 <= (-__pyx_v_cutoff)) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L11;
        }
+5293:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2, -m2b2 + rm0)
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
+5294:                     roots[numRoots] = s
          (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5295:                     numRoots += 1
          __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5296:                     if (m2b2 == -cutoff):
          __pyx_t_1 = ((__pyx_v_m2b2 == (-__pyx_v_cutoff)) != 0);
          if (__pyx_t_1) {
/* … */
          }
+5297:                         roots[numRoots] = -sHat
            (__pyx_v_roots[__pyx_v_numRoots]) = (-__pyx_v_sHat);
+5298:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5299:                 elif (m2b2 >= cutoff):
        __pyx_t_1 = ((__pyx_v_m2b2 >= __pyx_v_cutoff) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L11;
        }
+5300:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5301:                         -m2b2)
+5302:                     roots[numRoots] = s
          (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5303:                     numRoots += 1
          __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5304:                     if (m2b2 == cutoff):
          __pyx_t_1 = ((__pyx_v_m2b2 == __pyx_v_cutoff) != 0);
          if (__pyx_t_1) {
/* … */
          }
+5305:                         roots[numRoots] = sHat
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_sHat;
+5306:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5307:                 else:
+5308:                     if (m2b2 <= zero):
        /*else*/ {
          __pyx_t_1 = ((__pyx_v_m2b2 <= __pyx_v_zero) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L14;
          }
+5309:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5310:                             -m2b2 + rm0)
+5311:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5312:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5313:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_sHat));
 5314:                             -sHat)
+5315:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5316:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5317:                     else:
+5318:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          /*else*/ {
/* … */
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5319:                             -m2b2)
+5320:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5321:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5322:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, sHat,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, __pyx_v_sHat, ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5323:                             -m2b2 + rm0)
+5324:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5325:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
          }
          __pyx_L14:;
        }
        __pyx_L11:;
 5326:             else:
+5327:                 if (m2b2 < zero):
      /*else*/ {
        __pyx_t_1 = ((__pyx_v_m2b2 < __pyx_v_zero) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+5328:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5329:                         -m2b2 + rm0)
+5330:                 elif (m2b2 > zero):
        __pyx_t_1 = ((__pyx_v_m2b2 > __pyx_v_zero) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+5331:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5332:                         -m2b2)
 5333:                 else:
+5334:                     s = zero
        /*else*/ {
          __pyx_v_s = __pyx_v_zero;
        }
        __pyx_L15:;
+5335:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5336:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
      }
      __pyx_L10:;
 5337:         else:
 5338:             # The new line origin is B' = (0,0,b2').
+5339:             if (m2b2 < zero):
    /*else*/ {
      __pyx_t_1 = ((__pyx_v_m2b2 < __pyx_v_zero) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L16;
      }
+5340:                 s = -m2b2 + rm0
        __pyx_v_s = ((-__pyx_v_m2b2) + __pyx_v_rm0);
+5341:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5342:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5343: 
+5344:             elif (m2b2 > zero):
      __pyx_t_1 = ((__pyx_v_m2b2 > __pyx_v_zero) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L16;
      }
+5345:                 s = -m2b2 - rm0
        __pyx_v_s = ((-__pyx_v_m2b2) - __pyx_v_rm0);
+5346:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5347:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5348:             else:
+5349:                 s = -m2b2 + rm0
      /*else*/ {
        __pyx_v_s = ((-__pyx_v_m2b2) + __pyx_v_rm0);
+5350:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5351:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5352:                 s = -m2b2 - rm0
        __pyx_v_s = ((-__pyx_v_m2b2) - __pyx_v_rm0);
+5353:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5354:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
      }
      __pyx_L16:;
    }
    __pyx_L9:;
 5355:         # Checking which one is the closest solution............................
+5356:         tmin = roots[0] + lambd
    __pyx_v_tmin = ((__pyx_v_roots[0]) + __pyx_v_lambd);
+5357:         for i in range(1,numRoots):
    __pyx_t_2 = __pyx_v_numRoots;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 1; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+5358:             t = roots[i] + lambd
      __pyx_v_t = ((__pyx_v_roots[__pyx_v_i]) + __pyx_v_lambd);
+5359:             if (t>0 and t<tmin):
      __pyx_t_5 = ((__pyx_v_t > 0.0) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L20_bool_binop_done;
      }
      __pyx_t_5 = ((__pyx_v_t < __pyx_v_tmin) != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L20_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
    }
+5360:                 tmin = t
        __pyx_v_tmin = __pyx_v_t;
+5361:         if tmin < 0:
    __pyx_t_1 = ((__pyx_v_tmin < 0.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5362:             tmin = 0.
      __pyx_v_tmin = 0.;
 5363:         # Now that we know the closest point on the line we can compute the
 5364:         # closest point on the circle and compute the distance
+5365:         line_closest[0] = origin[0] + tmin * direction[0]
    (__pyx_v_line_closest[0]) = ((__pyx_v_origin[0]) + (__pyx_v_tmin * (__pyx_v_direction[0])));
+5366:         line_closest[1] = origin[1] + tmin * direction[1]
    (__pyx_v_line_closest[1]) = ((__pyx_v_origin[1]) + (__pyx_v_tmin * (__pyx_v_direction[1])));
+5367:         line_closest[2] = origin[2] + tmin * direction[2]
    (__pyx_v_line_closest[2]) = ((__pyx_v_origin[2]) + (__pyx_v_tmin * (__pyx_v_direction[2])));
+5368:         compute_cross_prod(circle_normal, line_closest, NxDelta)
    __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_circle_normal, __pyx_v_line_closest, __pyx_v_NxDelta);
+5369:         if not (Cabs(NxDelta[0]) <= _VSMALL
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[0])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L24_bool_binop_done;
    }
/* … */
    __pyx_t_5 = ((!__pyx_t_1) != 0);
    if (__pyx_t_5) {
/* … */
      goto __pyx_L23;
    }
+5370:                 and Cabs(NxDelta[1]) <= _VSMALL
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[1])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L24_bool_binop_done;
    }
+5371:                 and Cabs(NxDelta[2]) <= _VSMALL):
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[2])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    __pyx_t_1 = __pyx_t_5;
    __pyx_L24_bool_binop_done:;
+5372:             norm_ppar = Csqrt(line_closest[0]*line_closest[0]
      __pyx_v_norm_ppar = sqrt((((__pyx_v_line_closest[0]) * (__pyx_v_line_closest[0])) + ((__pyx_v_line_closest[1]) * (__pyx_v_line_closest[1]))));
 5373:                               + line_closest[1]*line_closest[1])
+5374:             circle_closest[0] = radius * line_closest[0] / norm_ppar
      (__pyx_v_circle_closest[0]) = ((__pyx_v_radius * (__pyx_v_line_closest[0])) / __pyx_v_norm_ppar);
+5375:             circle_closest[1] = radius * line_closest[1] / norm_ppar
      (__pyx_v_circle_closest[1]) = ((__pyx_v_radius * (__pyx_v_line_closest[1])) / __pyx_v_norm_ppar);
+5376:             circle_closest[2] = circle_center[2]
      (__pyx_v_circle_closest[2]) = (__pyx_v_circle_center[2]);
+5377:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5378:                 diff[i] = line_closest[i] - circle_closest[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_closest[__pyx_v_i]));
      }
+5379:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5380:             result[0] = tmin
      (__pyx_v_result[0]) = __pyx_v_tmin;
+5381:             result[1] = distance
      (__pyx_v_result[1]) = __pyx_v_distance;
 5382:         else:
+5383:             diff[0] = line_closest[0] - radius
    /*else*/ {
      (__pyx_v_diff[0]) = ((__pyx_v_line_closest[0]) - __pyx_v_radius);
+5384:             diff[1] = line_closest[1]
      (__pyx_v_diff[1]) = (__pyx_v_line_closest[1]);
+5385:             diff[2] = line_closest[2] - circle_center[2]
      (__pyx_v_diff[2]) = ((__pyx_v_line_closest[2]) - (__pyx_v_circle_center[2]));
+5386:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5387:             result[0] = tmin
      (__pyx_v_result[0]) = __pyx_v_tmin;
+5388:             result[1] = distance
      (__pyx_v_result[1]) = __pyx_v_distance;
    }
    __pyx_L23:;
 5389:     else:
 5390:         # The line direction and the plane normal are parallel.
 5391:         # There is only one solution the intersection between line and plane
+5392:         if not (Cabs(DxN[0]) <= _VSMALL
  /*else*/ {
/* … */
    __pyx_t_1 = ((fabs((__pyx_v_DxN[0])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_1) {
    } else {
      __pyx_t_5 = __pyx_t_1;
      goto __pyx_L30_bool_binop_done;
    }
/* … */
    __pyx_t_1 = ((!__pyx_t_5) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L29;
    }
+5393:                 and Cabs(DxN[1]) <= _VSMALL
    __pyx_t_1 = ((fabs((__pyx_v_DxN[1])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_1) {
    } else {
      __pyx_t_5 = __pyx_t_1;
      goto __pyx_L30_bool_binop_done;
    }
+5394:                 and Cabs(DxN[2]) <= _VSMALL):
    __pyx_t_1 = ((fabs((__pyx_v_DxN[2])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    __pyx_t_5 = __pyx_t_1;
    __pyx_L30_bool_binop_done:;
 5395:             # The line is A+t*N but with A != C.
+5396:             t = -compute_dot_prod(direction, D)
      __pyx_v_t = (-__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direction, __pyx_v_D));
 5397:             # We compute line closest
+5398:             line_closest[0] = origin[0] + t * direction[0]
      (__pyx_v_line_closest[0]) = ((__pyx_v_origin[0]) + (__pyx_v_t * (__pyx_v_direction[0])));
+5399:             line_closest[1] = origin[1] + t * direction[1]
      (__pyx_v_line_closest[1]) = ((__pyx_v_origin[1]) + (__pyx_v_t * (__pyx_v_direction[1])));
+5400:             line_closest[2] = origin[2] + t * direction[2]
      (__pyx_v_line_closest[2]) = ((__pyx_v_origin[2]) + (__pyx_v_t * (__pyx_v_direction[2])));
 5401:             # We compute cirlce closest
+5402:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5403:                 diff[i] = line_closest[i] - circle_center[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_center[__pyx_v_i]));
      }
+5404:             distance = radius / Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = (__pyx_v_radius / sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff)));
+5405:             circle_closest[0] = line_closest[0] * distance
      (__pyx_v_circle_closest[0]) = ((__pyx_v_line_closest[0]) * __pyx_v_distance);
+5406:             circle_closest[1] = line_closest[1] * distance
      (__pyx_v_circle_closest[1]) = ((__pyx_v_line_closest[1]) * __pyx_v_distance);
+5407:             circle_closest[2] = circ_z + (line_closest[2] - circ_z) * distance
      (__pyx_v_circle_closest[2]) = (__pyx_v_circ_z + (((__pyx_v_line_closest[2]) - __pyx_v_circ_z) * __pyx_v_distance));
+5408:             if t < 0:
      __pyx_t_1 = ((__pyx_v_t < 0.0) != 0);
      if (__pyx_t_1) {
/* … */
      }
 5409:                 # fi t is negative, we take origin as closest point
+5410:                 line_closest[0] = origin[0]
        (__pyx_v_line_closest[0]) = (__pyx_v_origin[0]);
+5411:                 line_closest[1] = origin[1]
        (__pyx_v_line_closest[1]) = (__pyx_v_origin[1]);
+5412:                 line_closest[2] = origin[2]
        (__pyx_v_line_closest[2]) = (__pyx_v_origin[2]);
+5413:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5414:                 diff[i] = line_closest[i] - circle_closest[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_closest[__pyx_v_i]));
      }
+5415:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5416:             result[0] = t
      (__pyx_v_result[0]) = __pyx_v_t;
+5417:             result[1] = distance
      (__pyx_v_result[1]) = __pyx_v_distance;
 5418:         else:
 5419:             # The line direction and the normal vector are on the same line
 5420:             # so C is the closest point for the circle and the distance is
 5421:             # the radius unless the ray's origin is after the circle center
+5422:             if (origin[2] * direction[2] <= circle_center[2] * direction[2]) :
    /*else*/ {
      __pyx_t_1 = ((((__pyx_v_origin[2]) * (__pyx_v_direction[2])) <= ((__pyx_v_circle_center[2]) * (__pyx_v_direction[2]))) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L38;
      }
+5423:                 t = Cabs(circle_center[2] - origin[2])
        __pyx_v_t = fabs(((__pyx_v_circle_center[2]) - (__pyx_v_origin[2])));
+5424:                 result[0] = t
        (__pyx_v_result[0]) = __pyx_v_t;
+5425:                 result[1] = radius
        (__pyx_v_result[1]) = __pyx_v_radius;
 5426:             else:
+5427:                 t = Cabs(circle_center[2] - origin[2])
      /*else*/ {
        __pyx_v_t = fabs(((__pyx_v_circle_center[2]) - (__pyx_v_origin[2])));
+5428:                 result[0] = 0
        (__pyx_v_result[0]) = 0.0;
+5429:                 result[1] = Csqrt(radius*radius + t*t)
        (__pyx_v_result[1]) = sqrt(((__pyx_v_radius * __pyx_v_radius) + (__pyx_v_t * __pyx_v_t)));
      }
      __pyx_L38:;
    }
    __pyx_L29:;
  }
  __pyx_L6:;
+5430:     result[0] = result[0] * inv_norm_dir
  (__pyx_v_result[0]) = ((__pyx_v_result[0]) * __pyx_v_inv_norm_dir);
+5431:     return
  goto __pyx_L0;
 5432: 
 5433: 
+5434: def comp_dist_los_circle_vec(int nlos, int ncircles,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_67comp_dist_los_circle_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_66comp_dist_los_circle_vec[] = "\n    This function computes the intersection of a Ray (or Line Of Sight)\n    and a circle in 3D. It returns `kmin`, the coefficient such that the\n    ray of origin O = [ori1, ori2, ori3] and of directional vector\n    D = [dir1, dir2, dir3] is closest to the circle of radius `radius`\n    and centered `(0, 0, circ_z)` at the point P = O + kmin * D.\n    The variable `norm_dir` is the squared norm of the direction of the ray.\n    This is the vectorial version, we expect the directions and origins to be:\n    dirs = [[dir1_los1, dir2_los1, dir3_los1], [dir1_los2,...]\n    oris = [[ori1_los1, ori2_los1, ori3_los1], [ori1_los2,...]\n    Returns\n    =======\n    res : (2, nlos, ncircles)\n        res = [res_k, res_d] where res_k is a (nlos, ncircles) numpy array\n        with the k coefficients for each LOS where the minimum distance\n        to each circle is reached\n        is met for each circle, and res_d is a (nlos, ncircles) numpy array\n        with the distance between each LOS to each circle\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `dist_los_circle_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_67comp_dist_los_circle_vec = {"comp_dist_los_circle_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_67comp_dist_los_circle_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_66comp_dist_los_circle_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_67comp_dist_los_circle_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nlos;
  int __pyx_v_ncircles;
  PyArrayObject *__pyx_v_dirs = 0;
  PyArrayObject *__pyx_v_oris = 0;
  PyArrayObject *__pyx_v_circle_radius = 0;
  PyArrayObject *__pyx_v_circle_z = 0;
  PyArrayObject *__pyx_v_norm_dir = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_circle_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlos,&__pyx_n_s_ncircles,&__pyx_n_s_dirs,&__pyx_n_s_oris,&__pyx_n_s_circle_radius,&__pyx_n_s_circle_z,&__pyx_n_s_norm_dir,0};
    PyObject* values[7] = {0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_66comp_dist_los_circle_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nlos, int __pyx_v_ncircles, PyArrayObject *__pyx_v_dirs, PyArrayObject *__pyx_v_oris, PyArrayObject *__pyx_v_circle_radius, PyArrayObject *__pyx_v_circle_z, PyArrayObject *__pyx_v_norm_dir) {
  arrayobject *__pyx_v_kmin_tab = 0;
  arrayobject *__pyx_v_dist_tab = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_circle_radius;
  __Pyx_Buffer __pyx_pybuffer_circle_radius;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_circle_z;
  __Pyx_Buffer __pyx_pybuffer_circle_z;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dirs;
  __Pyx_Buffer __pyx_pybuffer_dirs;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_norm_dir;
  __Pyx_Buffer __pyx_pybuffer_norm_dir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_oris;
  __Pyx_Buffer __pyx_pybuffer_oris;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_circle_vec", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_norm_dir);
  __pyx_pybuffer_dirs.pybuffer.buf = NULL;
  __pyx_pybuffer_dirs.refcount = 0;
  __pyx_pybuffernd_dirs.data = NULL;
  __pyx_pybuffernd_dirs.rcbuffer = &__pyx_pybuffer_dirs;
  __pyx_pybuffer_oris.pybuffer.buf = NULL;
  __pyx_pybuffer_oris.refcount = 0;
  __pyx_pybuffernd_oris.data = NULL;
  __pyx_pybuffernd_oris.rcbuffer = &__pyx_pybuffer_oris;
  __pyx_pybuffer_circle_radius.pybuffer.buf = NULL;
  __pyx_pybuffer_circle_radius.refcount = 0;
  __pyx_pybuffernd_circle_radius.data = NULL;
  __pyx_pybuffernd_circle_radius.rcbuffer = &__pyx_pybuffer_circle_radius;
  __pyx_pybuffer_circle_z.pybuffer.buf = NULL;
  __pyx_pybuffer_circle_z.refcount = 0;
  __pyx_pybuffernd_circle_z.data = NULL;
  __pyx_pybuffernd_circle_z.rcbuffer = &__pyx_pybuffer_circle_z;
  __pyx_pybuffer_norm_dir.pybuffer.buf = NULL;
  __pyx_pybuffer_norm_dir.refcount = 0;
  __pyx_pybuffernd_norm_dir.data = NULL;
  __pyx_pybuffernd_norm_dir.rcbuffer = &__pyx_pybuffer_norm_dir;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer, (PyObject*)__pyx_v_dirs, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5434, __pyx_L1_error)
  }
  __pyx_pybuffernd_dirs.diminfo[0].strides = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dirs.diminfo[0].shape = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dirs.diminfo[1].strides = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dirs.diminfo[1].shape = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_oris.rcbuffer->pybuffer, (PyObject*)__pyx_v_oris, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5434, __pyx_L1_error)
  }
  __pyx_pybuffernd_oris.diminfo[0].strides = __pyx_pybuffernd_oris.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_oris.diminfo[0].shape = __pyx_pybuffernd_oris.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_oris.diminfo[1].strides = __pyx_pybuffernd_oris.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_oris.diminfo[1].shape = __pyx_pybuffernd_oris.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer, (PyObject*)__pyx_v_circle_radius, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5434, __pyx_L1_error)
  }
  __pyx_pybuffernd_circle_radius.diminfo[0].strides = __pyx_pybuffernd_circle_radius.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_circle_radius.diminfo[0].shape = __pyx_pybuffernd_circle_radius.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_circle_z, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5434, __pyx_L1_error)
  }
  __pyx_pybuffernd_circle_z.diminfo[0].strides = __pyx_pybuffernd_circle_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_circle_z.diminfo[0].shape = __pyx_pybuffernd_circle_z.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_v_norm_dir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5434, __pyx_L1_error)
  }
  __pyx_pybuffernd_norm_dir.diminfo[0].strides = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_norm_dir.diminfo[0].shape = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oris.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_circle_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oris.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_kmin_tab);
  __Pyx_XDECREF((PyObject *)__pyx_v_dist_tab);
  __Pyx_XDECREF((PyObject *)__pyx_v_norm_dir);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__224 = PyTuple_Pack(9, __pyx_n_s_nlos, __pyx_n_s_ncircles, __pyx_n_s_dirs, __pyx_n_s_oris, __pyx_n_s_circle_radius, __pyx_n_s_circle_z, __pyx_n_s_norm_dir, __pyx_n_s_kmin_tab, __pyx_n_s_dist_tab); if (unlikely(!__pyx_tuple__224)) __PYX_ERR(0, 5434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__224);
  __Pyx_GIVEREF(__pyx_tuple__224);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_67comp_dist_los_circle_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comp_dist_los_circle_vec, __pyx_t_2) < 0) __PYX_ERR(0, 5434, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__225 = (PyObject*)__Pyx_PyCode_New(7, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__224, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_comp_dist_los_circle_vec, 5434, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__225)) __PYX_ERR(0, 5434, __pyx_L1_error)
 5435:                              np.ndarray[double,ndim=2,mode='c'] dirs,
 5436:                              np.ndarray[double,ndim=2,mode='c'] oris,
 5437:                              np.ndarray[double,ndim=1,mode='c'] circle_radius,
 5438:                              np.ndarray[double,ndim=1,mode='c'] circle_z,
+5439:                              np.ndarray[double,ndim=1,mode='c'] norm_dir = None):
    values[6] = (PyObject *)((PyArrayObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ncircles)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, 1); __PYX_ERR(0, 5434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dirs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, 2); __PYX_ERR(0, 5434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_oris)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, 3); __PYX_ERR(0, 5434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circle_radius)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, 4); __PYX_ERR(0, 5434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circle_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, 5); __PYX_ERR(0, 5434, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_norm_dir);
          if (value) { values[6] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "comp_dist_los_circle_vec") < 0)) __PYX_ERR(0, 5434, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5434, __pyx_L3_error)
    __pyx_v_ncircles = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ncircles == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5434, __pyx_L3_error)
    __pyx_v_dirs = ((PyArrayObject *)values[2]);
    __pyx_v_oris = ((PyArrayObject *)values[3]);
    __pyx_v_circle_radius = ((PyArrayObject *)values[4]);
    __pyx_v_circle_z = ((PyArrayObject *)values[5]);
    __pyx_v_norm_dir = ((PyArrayObject *)values[6]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comp_dist_los_circle_vec", 0, 6, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5434, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_circle_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirs), __pyx_ptype_5numpy_ndarray, 1, "dirs", 0))) __PYX_ERR(0, 5435, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oris), __pyx_ptype_5numpy_ndarray, 1, "oris", 0))) __PYX_ERR(0, 5436, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_circle_radius), __pyx_ptype_5numpy_ndarray, 1, "circle_radius", 0))) __PYX_ERR(0, 5437, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_circle_z), __pyx_ptype_5numpy_ndarray, 1, "circle_z", 0))) __PYX_ERR(0, 5438, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_norm_dir), __pyx_ptype_5numpy_ndarray, 1, "norm_dir", 0))) __PYX_ERR(0, 5439, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_66comp_dist_los_circle_vec(__pyx_self, __pyx_v_nlos, __pyx_v_ncircles, __pyx_v_dirs, __pyx_v_oris, __pyx_v_circle_radius, __pyx_v_circle_z, __pyx_v_norm_dir);
 5440:     """
 5441:     This function computes the intersection of a Ray (or Line Of Sight)
 5442:     and a circle in 3D. It returns `kmin`, the coefficient such that the
 5443:     ray of origin O = [ori1, ori2, ori3] and of directional vector
 5444:     D = [dir1, dir2, dir3] is closest to the circle of radius `radius`
 5445:     and centered `(0, 0, circ_z)` at the point P = O + kmin * D.
 5446:     The variable `norm_dir` is the squared norm of the direction of the ray.
 5447:     This is the vectorial version, we expect the directions and origins to be:
 5448:     dirs = [[dir1_los1, dir2_los1, dir3_los1], [dir1_los2,...]
 5449:     oris = [[ori1_los1, ori2_los1, ori3_los1], [ori1_los2,...]
 5450:     Returns
 5451:     =======
 5452:     res : (2, nlos, ncircles)
 5453:         res = [res_k, res_d] where res_k is a (nlos, ncircles) numpy array
 5454:         with the k coefficients for each LOS where the minimum distance
 5455:         to each circle is reached
 5456:         is met for each circle, and res_d is a (nlos, ncircles) numpy array
 5457:         with the distance between each LOS to each circle
 5458:     ---
 5459:     This is the PYTHON function, use only if you need this computation from
 5460:     Python, if you need it from Cython, use `dist_los_circle_core`
 5461:     """
+5462:     cdef array kmin_tab = clone(array('d'), nlos*ncircles, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5462, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), (__pyx_v_nlos * __pyx_v_ncircles), 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5462, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_kmin_tab = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+5463:     cdef array dist_tab = clone(array('d'), nlos*ncircles, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_nlos * __pyx_v_ncircles), 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5463, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dist_tab = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
 5464: 
+5465:     if norm_dir is None:
  __pyx_t_3 = (((PyObject *)__pyx_v_norm_dir) == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
/* … */
  }
+5466:         norm_dir = -np.ones(nlos)
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Negative(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5466, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5466, __pyx_L1_error)
    __pyx_t_7 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_8 < 0)) {
        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_v_norm_dir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        }
        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;
      }
      __pyx_pybuffernd_norm_dir.diminfo[0].strides = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_norm_dir.diminfo[0].shape = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5466, __pyx_L1_error)
    }
    __pyx_t_7 = 0;
    __Pyx_DECREF_SET(__pyx_v_norm_dir, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;
+5467:     comp_dist_los_circle_vec_core(nlos, ncircles,
  __pyx_f_4tofu_4geom_5_GG03_comp_dist_los_circle_vec_core(__pyx_v_nlos, __pyx_v_ncircles, ((double *)__pyx_v_dirs->data), ((double *)__pyx_v_oris->data), ((double *)__pyx_v_circle_radius->data), ((double *)__pyx_v_circle_z->data), ((double *)__pyx_v_norm_dir->data), __pyx_t_12, __pyx_t_13);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __pyx_t_13.memview = NULL;
  __pyx_t_13.data = NULL;
 5468:                                   <double*>dirs.data,
 5469:                                   <double*>oris.data,
 5470:                                   <double*>circle_radius.data,
 5471:                                   <double*>circle_z.data,
 5472:                                   <double*>norm_dir.data,
+5473:                                   kmin_tab, dist_tab)
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_kmin_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 5473, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dist_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_13.memview)) __PYX_ERR(0, 5473, __pyx_L1_error)
+5474:     return np.asarray(kmin_tab).reshape(nlos, ncircles), \
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, ((PyObject *)__pyx_v_kmin_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)__pyx_v_kmin_tab));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_reshape); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ncircles); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_1, __pyx_t_2};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5474, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_1, __pyx_t_2};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5474, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_8, __pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_8, __pyx_t_2);
    __pyx_t_1 = 0;
    __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_15, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5474, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
+5475:         np.asarray(dist_tab).reshape(nlos, ncircles)
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_15 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, ((PyObject *)__pyx_v_dist_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_v_dist_tab));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ncircles); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_15, __pyx_t_2};
    __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5475, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_15, __pyx_t_2};
    __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5475, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_16 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 5475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_16, 0+__pyx_t_8, __pyx_t_15);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_16, 1+__pyx_t_8, __pyx_t_2);
    __pyx_t_15 = 0;
    __pyx_t_2 = 0;
    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_16, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5475, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 5476: 
+5477: cdef void comp_dist_los_circle_vec_core(int num_los, int num_cir,
static void __pyx_f_4tofu_4geom_5_GG03_comp_dist_los_circle_vec_core(CYTHON_UNUSED int __pyx_v_num_los, int __pyx_v_num_cir, double *__pyx_v_los_directions, double *__pyx_v_los_origins, double *__pyx_v_circle_radius, double *__pyx_v_circle_z, double *__pyx_v_norm_dir_tab, __Pyx_memviewslice __pyx_v_res_k, __Pyx_memviewslice __pyx_v_res_dist) {
  int __pyx_v_i;
  int __pyx_v_ind_los;
  int __pyx_v_ind_cir;
  double *__pyx_v_loc_res;
  double *__pyx_v_dirv;
  double *__pyx_v_orig;
  double __pyx_v_radius;
  double __pyx_v_circ_z;
  double __pyx_v_norm_dir;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 5478:                                         double* los_directions,
 5479:                                         double* los_origins,
 5480:                                         double* circle_radius,
 5481:                                         double* circle_z,
 5482:                                         double* norm_dir_tab,
 5483:                                         double[::1] res_k,
 5484:                                         double[::1] res_dist) nogil:
 5485:     """ This function computes the intersection of a Ray (or Line Of Sight)
 5486:     # and a circle in 3D. It returns `kmin`, the coefficient such that the
 5487:     # ray of origin O = [ori1, ori2, ori3] and of directional vector
 5488:     # D = [dir1, dir2, dir3] is closest to the circle of radius `radius`
 5489:     # and centered `(0, 0, circ_z)` at the point P = O + kmin * D.
 5490:     # The variable `norm_dir` is the squared norm of the direction of the ray.
 5491:     # This is the vectorial version, we expect the directions and origins to be:
 5492:     # dirs = [dir1_los1, dir2_los1, dir3_los1, dir1_los2,...]
 5493:     # oris = [ori1_los1, ori2_los1, ori3_los1, ori1_los2,...]
 5494:     # res = [kmin(los1, cir1), kmin(los1, cir2),...]
 5495:     # ---
 5496:     # This is the PYTHON function, use only if you need this computation from
 5497:     # Python, if you need it from Cython, use `dist_los_circle_core`
 5498:     """
 5499:     cdef int i, ind_los, ind_cir
 5500:     cdef double* loc_res
 5501:     cdef double* dirv
 5502:     cdef double* orig
 5503:     cdef double radius, circ_z, norm_dir
+5504:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_dirv, __pyx_v_loc_res, __pyx_v_orig)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_dirv = ((double *)1);
                __pyx_v_loc_res = ((double *)1);
                __pyx_v_orig = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+5505:         dirv = <double*>malloc(3*sizeof(double))
                __pyx_v_dirv = ((double *)malloc((3 * (sizeof(double)))));
+5506:         orig = <double*>malloc(3*sizeof(double))
                __pyx_v_orig = ((double *)malloc((3 * (sizeof(double)))));
+5507:         loc_res = <double*>malloc(2*sizeof(double))
                __pyx_v_loc_res = ((double *)malloc((2 * (sizeof(double)))));
+5508:         for ind_los in prange(num_los):
                __pyx_t_1 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_3 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_circ_z) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ind_cir) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_norm_dir) lastprivate(__pyx_v_radius)
                        #endif /* _OPENMP */
                        for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_2);
                                /* Initialize private variables to invalid values */
                                __pyx_v_circ_z = ((double)__PYX_NAN());
                                __pyx_v_i = ((int)0xbad0bad0);
                                __pyx_v_ind_cir = ((int)0xbad0bad0);
                                __pyx_v_norm_dir = ((double)__PYX_NAN());
                                __pyx_v_radius = ((double)__PYX_NAN());
+5509:             for i in range(3):
                                for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
                                  __pyx_v_i = __pyx_t_4;
+5510:                 dirv[i] = los_directions[ind_los * 3 + i]
                                  (__pyx_v_dirv[__pyx_v_i]) = (__pyx_v_los_directions[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
+5511:                 orig[i] = los_origins[ind_los * 3 + i]
                                  (__pyx_v_orig[__pyx_v_i]) = (__pyx_v_los_origins[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
                                }
+5512:             norm_dir = norm_dir_tab[ind_los]
                                __pyx_v_norm_dir = (__pyx_v_norm_dir_tab[__pyx_v_ind_los]);
+5513:             if norm_dir < 0.:
                                __pyx_t_5 = ((__pyx_v_norm_dir < 0.) != 0);
                                if (__pyx_t_5) {
/* … */
                                }
+5514:                 norm_dir = Csqrt(compute_dot_prod(dirv, dirv))
                                  __pyx_v_norm_dir = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_dirv, __pyx_v_dirv));
+5515:             for ind_cir in range(num_cir):
                                __pyx_t_4 = __pyx_v_num_cir;
                                __pyx_t_6 = __pyx_t_4;
                                for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                                  __pyx_v_ind_cir = __pyx_t_7;
+5516:                 radius = circle_radius[ind_cir]
                                  __pyx_v_radius = (__pyx_v_circle_radius[__pyx_v_ind_cir]);
+5517:                 circ_z = circle_z[ind_cir]
                                  __pyx_v_circ_z = (__pyx_v_circle_z[__pyx_v_ind_cir]);
+5518:                 dist_los_circle_core(dirv, orig, radius, circ_z,
                                  __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_dirv, __pyx_v_orig, __pyx_v_radius, __pyx_v_circ_z, __pyx_v_norm_dir, __pyx_v_loc_res);
 5519:                                      norm_dir, loc_res)
+5520:                 res_k[ind_los * num_cir + ind_cir] = loc_res[0]
                                  __pyx_t_8 = ((__pyx_v_ind_los * __pyx_v_num_cir) + __pyx_v_ind_cir);
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_k.data) + __pyx_t_8)) )) = (__pyx_v_loc_res[0]);
+5521:                 res_dist[ind_los * num_cir + ind_cir] = loc_res[1]
                                  __pyx_t_9 = ((__pyx_v_ind_los * __pyx_v_num_cir) + __pyx_v_ind_cir);
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_dist.data) + __pyx_t_9)) )) = (__pyx_v_loc_res[1]);
                                }
                            }
                        }
                    }
                }
+5522:         free(dirv)
                free(__pyx_v_dirv);
+5523:         free(orig)
                free(__pyx_v_orig);
+5524:         free(loc_res)
                free(__pyx_v_loc_res);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+5525:     return
  goto __pyx_L0;
 5526: 
 5527: # ==============================================================================
 5528: #
 5529: #                       TEST CLOSENESS CIRCLE - LOS
 5530: #
 5531: # ==============================================================================
 5532: 
+5533: def is_close_los_circle(np.ndarray[double,ndim=1,mode='c'] ray_vdir,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_69is_close_los_circle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_68is_close_los_circle[] = "\n    This function checks if at maximum a LOS is at a distance epsilon\n    form a cirlce\n    The result is True when distance < epsilon\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `is_los_close_circle_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_69is_close_los_circle = {"is_close_los_circle", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_69is_close_los_circle, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_68is_close_los_circle};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_69is_close_los_circle(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ray_orig = 0;
  double __pyx_v_radius;
  double __pyx_v_circ_z;
  double __pyx_v_eps;
  double __pyx_v_norm_dir;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_circle (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ray_vdir,&__pyx_n_s_ray_orig,&__pyx_n_s_radius,&__pyx_n_s_circ_z,&__pyx_n_s_eps,&__pyx_n_s_norm_dir,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle", 0, 5, 6, 1); __PYX_ERR(0, 5533, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radius)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle", 0, 5, 6, 2); __PYX_ERR(0, 5533, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circ_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle", 0, 5, 6, 3); __PYX_ERR(0, 5533, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle", 0, 5, 6, 4); __PYX_ERR(0, 5533, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_norm_dir);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_close_los_circle") < 0)) __PYX_ERR(0, 5533, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ray_vdir = ((PyArrayObject *)values[0]);
    __pyx_v_ray_orig = ((PyArrayObject *)values[1]);
    __pyx_v_radius = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_radius == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5535, __pyx_L3_error)
    __pyx_v_circ_z = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_circ_z == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5535, __pyx_L3_error)
    __pyx_v_eps = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_eps == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5535, __pyx_L3_error)
    if (values[5]) {
      __pyx_v_norm_dir = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_norm_dir == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5536, __pyx_L3_error)
    } else {
      __pyx_v_norm_dir = ((double)-1.0);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_close_los_circle", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5533, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_circle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 5533, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 5534, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_68is_close_los_circle(__pyx_self, __pyx_v_ray_vdir, __pyx_v_ray_orig, __pyx_v_radius, __pyx_v_circ_z, __pyx_v_eps, __pyx_v_norm_dir);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_68is_close_los_circle(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ray_orig, double __pyx_v_radius, double __pyx_v_circ_z, double __pyx_v_eps, double __pyx_v_norm_dir) {
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_circle", 0);
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5533, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5533, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_circle", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__226 = PyTuple_Pack(6, __pyx_n_s_ray_vdir, __pyx_n_s_ray_orig, __pyx_n_s_radius, __pyx_n_s_circ_z, __pyx_n_s_eps, __pyx_n_s_norm_dir); if (unlikely(!__pyx_tuple__226)) __PYX_ERR(0, 5533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__226);
  __Pyx_GIVEREF(__pyx_tuple__226);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_69is_close_los_circle, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_close_los_circle, __pyx_t_2) < 0) __PYX_ERR(0, 5533, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__227 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__226, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_is_close_los_circle, 5533, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__227)) __PYX_ERR(0, 5533, __pyx_L1_error)
 5534:                         np.ndarray[double,ndim=1,mode='c'] ray_orig,
 5535:                         double radius, double circ_z, double eps,
 5536:                         double norm_dir=-1.0):
 5537:     """
 5538:     This function checks if at maximum a LOS is at a distance epsilon
 5539:     form a cirlce
 5540:     The result is True when distance < epsilon
 5541:     ---
 5542:     This is the PYTHON function, use only if you need this computation from
 5543:     Python, if you need it from Cython, use `is_los_close_circle_core`
 5544:     """
+5545:     return is_close_los_circle_core(<double*>ray_vdir.data,
  __Pyx_XDECREF(__pyx_r);
/* … */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_4tofu_4geom_5_GG03_is_close_los_circle_core(((double *)__pyx_v_ray_vdir->data), ((double *)__pyx_v_ray_orig->data), __pyx_v_radius, __pyx_v_circ_z, __pyx_v_norm_dir, __pyx_v_eps)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 5546:                                     <double*>ray_orig.data,
 5547:                                     radius, circ_z, norm_dir, eps)
 5548: 
 5549: 
+5550: cdef inline bint is_close_los_circle_core(const double[3] direct,
static CYTHON_INLINE int __pyx_f_4tofu_4geom_5_GG03_is_close_los_circle_core(double *__pyx_v_direct, double *__pyx_v_origin, double __pyx_v_radius, double __pyx_v_circ_z, double __pyx_v_norm_dir, double __pyx_v_eps) {
  int __pyx_v_numRoots;
  int __pyx_v_i;
  double __pyx_v_zero;
  double __pyx_v_m0sqr;
  double __pyx_v_m0;
  double __pyx_v_rm0;
  double __pyx_v_lambd;
  double __pyx_v_m2b2;
  double __pyx_v_b1sqr;
  double __pyx_v_b1;
  double __pyx_v_twoThirds;
  double __pyx_v_sHat;
  double __pyx_v_gHat;
  double __pyx_v_cutoff;
  double __pyx_v_s;
  double __pyx_v_D[3];
  double __pyx_v_MxN[3];
  double __pyx_v_DxN[3];
  double __pyx_v_NxDelta[3];
  double __pyx_v_circle_normal[3];
  double __pyx_v_roots[3];
  double __pyx_v_diff[3];
  double __pyx_v_circle_center[3];
  double __pyx_v_circle_closest[3];
  double __pyx_v_line_closest[3];
  double __pyx_v_direction[3];
  double __pyx_v_tmin;
  double __pyx_v_distance;
  double __pyx_v_inv_norm_dir;
  int __pyx_v_are_close;
  double __pyx_v_rm0sqr;
  double __pyx_v_t;
  double __pyx_v_norm_ppar;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 5551:                                           const double[3] origin,
 5552:                                           double radius, double circ_z,
 5553:                                           double norm_dir, double eps) nogil:
 5554:     # Source: https://www.geometrictools.com/Documentation/DistanceToCircle3.pdf
 5555:     # The line is P(t) = B+t*M.  The circle is |X-C| = r with Dot(N,X-C)=0.
 5556:     cdef int numRoots, i
+5557:     cdef double zero = 0., m0sqr, m0, rm0
  __pyx_v_zero = 0.;
 5558:     cdef double lambd, m2b2, b1sqr, b1, r0sqr, twoThirds, sHat, gHat, cutoff, s
 5559:     cdef double[3] D
 5560:     cdef double[3] MxN
 5561:     cdef double[3] DxN
 5562:     cdef double[3] NxDelta
 5563:     cdef double[3] circle_normal
 5564:     cdef double[3] roots
 5565:     cdef double[3] diff
 5566:     cdef double[3] circle_center
 5567:     cdef double[3] circle_closest
 5568:     cdef double[3] line_closest
 5569:     cdef double[3] direction
 5570:     cdef double tmin
 5571:     cdef double distance
 5572:     cdef double inv_norm_dir
 5573:     cdef bint are_close
 5574: 
 5575:     # .. initialization .....
+5576:     if norm_dir < 0:
  __pyx_t_1 = ((__pyx_v_norm_dir < 0.0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+5577:         norm_dir = Csqrt(compute_dot_prod(direct, direct))
    __pyx_v_norm_dir = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direct, __pyx_v_direct));
+5578:     inv_norm_dir = 1./ norm_dir
  __pyx_v_inv_norm_dir = (1. / __pyx_v_norm_dir);
 5579:     # .. initialization .....
+5580:     for i in range(3):
  for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
    __pyx_v_i = __pyx_t_2;
+5581:         circle_center[i] = 0.
    (__pyx_v_circle_center[__pyx_v_i]) = 0.;
+5582:         circle_normal[i] = 0.
    (__pyx_v_circle_normal[__pyx_v_i]) = 0.;
+5583:         roots[i] = 0.
    (__pyx_v_roots[__pyx_v_i]) = 0.;
 5584:         # we normalize direction
+5585:         direction[i] = direct[i] * inv_norm_dir
    (__pyx_v_direction[__pyx_v_i]) = ((__pyx_v_direct[__pyx_v_i]) * __pyx_v_inv_norm_dir);
  }
+5586:     circle_normal[2] = 1
  (__pyx_v_circle_normal[2]) = 1.0;
+5587:     circle_center[2] = circ_z
  (__pyx_v_circle_center[2]) = __pyx_v_circ_z;
 5588: 
+5589:     D[0] = origin[0]
  (__pyx_v_D[0]) = (__pyx_v_origin[0]);
+5590:     D[1] = origin[1]
  (__pyx_v_D[1]) = (__pyx_v_origin[1]);
+5591:     D[2] = origin[2] - circ_z
  (__pyx_v_D[2]) = ((__pyx_v_origin[2]) - __pyx_v_circ_z);
+5592:     compute_cross_prod(direction, circle_normal, MxN)
  __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_direction, __pyx_v_circle_normal, __pyx_v_MxN);
+5593:     compute_cross_prod(D, circle_normal, DxN)
  __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_D, __pyx_v_circle_normal, __pyx_v_DxN);
+5594:     m0sqr = compute_dot_prod(MxN, MxN)
  __pyx_v_m0sqr = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_MxN, __pyx_v_MxN);
 5595: 
+5596:     if (m0sqr > zero):
  __pyx_t_1 = ((__pyx_v_m0sqr > __pyx_v_zero) != 0);
  if (__pyx_t_1) {
/* … */
  }
 5597:         # Compute the critical points s for F'(s) = 0.
+5598:         numRoots = 0
    __pyx_v_numRoots = 0;
 5599:         # The line direction M and the plane normal N are not parallel.  Move
 5600:         # the line origin B = (b0,b1,b2) to B' = B + lambd*direction =
 5601:         # (0,b1',b2').
+5602:         m0 = Csqrt(m0sqr)
    __pyx_v_m0 = sqrt(__pyx_v_m0sqr);
+5603:         rm0 = radius * m0
    __pyx_v_rm0 = (__pyx_v_radius * __pyx_v_m0);
+5604:         lambd = -compute_dot_prod(MxN, DxN) / m0sqr
    __pyx_v_lambd = ((-__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_MxN, __pyx_v_DxN)) / __pyx_v_m0sqr);
+5605:         for i in range(3):
    for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
      __pyx_v_i = __pyx_t_2;
+5606:             D[i] += lambd * direction[i]
      __pyx_t_3 = __pyx_v_i;
      (__pyx_v_D[__pyx_t_3]) = ((__pyx_v_D[__pyx_t_3]) + (__pyx_v_lambd * (__pyx_v_direction[__pyx_v_i])));
+5607:             DxN[i] += lambd * MxN[i]
      __pyx_t_3 = __pyx_v_i;
      (__pyx_v_DxN[__pyx_t_3]) = ((__pyx_v_DxN[__pyx_t_3]) + (__pyx_v_lambd * (__pyx_v_MxN[__pyx_v_i])));
    }
+5608:         m2b2 = compute_dot_prod(direction, D)
    __pyx_v_m2b2 = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direction, __pyx_v_D);
+5609:         b1sqr = compute_dot_prod(DxN, DxN)
    __pyx_v_b1sqr = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_DxN, __pyx_v_DxN);
+5610:         if (b1sqr > zero) :
    __pyx_t_1 = ((__pyx_v_b1sqr > __pyx_v_zero) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L9;
    }
 5611:             # B' = (0,b1',b2') where b1' != 0.  See Sections 1.1.2 and 1.2.2
 5612:             # of the PDF documentation.
+5613:             b1 = Csqrt(b1sqr)
      __pyx_v_b1 = sqrt(__pyx_v_b1sqr);
+5614:             rm0sqr = radius * m0sqr
      __pyx_v_rm0sqr = (__pyx_v_radius * __pyx_v_m0sqr);
+5615:             if (rm0sqr > b1):
      __pyx_t_1 = ((__pyx_v_rm0sqr > __pyx_v_b1) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L10;
      }
+5616:                 twoThirds = 2.0 / 3.0
        __pyx_v_twoThirds = (2.0 / 3.0);
+5617:                 sHat = Csqrt((rm0sqr * b1sqr)**twoThirds - b1sqr) / m0
        __pyx_v_sHat = (sqrt((pow((__pyx_v_rm0sqr * __pyx_v_b1sqr), __pyx_v_twoThirds) - __pyx_v_b1sqr)) / __pyx_v_m0);
+5618:                 gHat = rm0sqr * sHat / Csqrt(m0sqr * sHat * sHat + b1sqr)
        __pyx_v_gHat = ((__pyx_v_rm0sqr * __pyx_v_sHat) / sqrt((((__pyx_v_m0sqr * __pyx_v_sHat) * __pyx_v_sHat) + __pyx_v_b1sqr)));
+5619:                 cutoff = gHat - sHat
        __pyx_v_cutoff = (__pyx_v_gHat - __pyx_v_sHat);
+5620:                 if (m2b2 <= -cutoff):
        __pyx_t_1 = ((__pyx_v_m2b2 <= (-__pyx_v_cutoff)) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L11;
        }
+5621:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2, -m2b2 + rm0)
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
+5622:                     roots[numRoots] = s
          (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5623:                     numRoots += 1
          __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5624:                     if (m2b2 == -cutoff):
          __pyx_t_1 = ((__pyx_v_m2b2 == (-__pyx_v_cutoff)) != 0);
          if (__pyx_t_1) {
/* … */
          }
+5625:                         roots[numRoots] = -sHat
            (__pyx_v_roots[__pyx_v_numRoots]) = (-__pyx_v_sHat);
+5626:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5627:                 elif (m2b2 >= cutoff):
        __pyx_t_1 = ((__pyx_v_m2b2 >= __pyx_v_cutoff) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L11;
        }
+5628:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5629:                         -m2b2)
+5630:                     roots[numRoots] = s
          (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5631:                     numRoots += 1
          __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5632:                     if (m2b2 == cutoff):
          __pyx_t_1 = ((__pyx_v_m2b2 == __pyx_v_cutoff) != 0);
          if (__pyx_t_1) {
/* … */
          }
+5633:                         roots[numRoots] = sHat
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_sHat;
+5634:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5635:                 else:
+5636:                     if (m2b2 <= zero):
        /*else*/ {
          __pyx_t_1 = ((__pyx_v_m2b2 <= __pyx_v_zero) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L14;
          }
+5637:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5638:                             -m2b2 + rm0)
+5639:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5640:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5641:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_sHat));
 5642:                             -sHat)
+5643:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5644:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5645:                     else:
+5646:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          /*else*/ {
/* … */
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5647:                             -m2b2)
+5648:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5649:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5650:                         s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, sHat,
            __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, __pyx_v_sHat, ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5651:                             -m2b2 + rm0)
+5652:                         roots[numRoots] = s
            (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5653:                         numRoots += 1
            __pyx_v_numRoots = (__pyx_v_numRoots + 1);
          }
          __pyx_L14:;
        }
        __pyx_L11:;
 5654:             else:
+5655:                 if (m2b2 < zero):
      /*else*/ {
        __pyx_t_1 = ((__pyx_v_m2b2 < __pyx_v_zero) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+5656:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, (-__pyx_v_m2b2), ((-__pyx_v_m2b2) + __pyx_v_rm0));
 5657:                         -m2b2 + rm0)
+5658:                 elif (m2b2 > zero):
        __pyx_t_1 = ((__pyx_v_m2b2 > __pyx_v_zero) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L15;
        }
+5659:                     s = compute_bisect(m2b2, rm0sqr, m0sqr, b1sqr, -m2b2 - rm0,
          __pyx_v_s = __pyx_f_4tofu_4geom_5_GG03_compute_bisect(__pyx_v_m2b2, __pyx_v_rm0sqr, __pyx_v_m0sqr, __pyx_v_b1sqr, ((-__pyx_v_m2b2) - __pyx_v_rm0), (-__pyx_v_m2b2));
 5660:                         -m2b2)
 5661:                 else:
+5662:                     s = zero
        /*else*/ {
          __pyx_v_s = __pyx_v_zero;
        }
        __pyx_L15:;
+5663:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5664:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
      }
      __pyx_L10:;
 5665:         else:
 5666:             # The new line origin is B' = (0,0,b2').
+5667:             if (m2b2 < zero):
    /*else*/ {
      __pyx_t_1 = ((__pyx_v_m2b2 < __pyx_v_zero) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L16;
      }
+5668:                 s = -m2b2 + rm0
        __pyx_v_s = ((-__pyx_v_m2b2) + __pyx_v_rm0);
+5669:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5670:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5671:             elif (m2b2 > zero):
      __pyx_t_1 = ((__pyx_v_m2b2 > __pyx_v_zero) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L16;
      }
+5672:                 s = -m2b2 - rm0
        __pyx_v_s = ((-__pyx_v_m2b2) - __pyx_v_rm0);
+5673:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5674:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
 5675:             else:
+5676:                 s = -m2b2 + rm0
      /*else*/ {
        __pyx_v_s = ((-__pyx_v_m2b2) + __pyx_v_rm0);
+5677:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5678:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
+5679:                 s = -m2b2 - rm0
        __pyx_v_s = ((-__pyx_v_m2b2) - __pyx_v_rm0);
+5680:                 roots[numRoots] = s
        (__pyx_v_roots[__pyx_v_numRoots]) = __pyx_v_s;
+5681:                 numRoots += 1
        __pyx_v_numRoots = (__pyx_v_numRoots + 1);
      }
      __pyx_L16:;
    }
    __pyx_L9:;
 5682:         # Checking which one is the closest solution............................
+5683:         tmin = roots[0] + lambd
    __pyx_v_tmin = ((__pyx_v_roots[0]) + __pyx_v_lambd);
+5684:         for i in range(1,numRoots):
    __pyx_t_2 = __pyx_v_numRoots;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 1; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_i = __pyx_t_4;
+5685:             t = roots[i] + lambd
      __pyx_v_t = ((__pyx_v_roots[__pyx_v_i]) + __pyx_v_lambd);
+5686:             if (t>0 and t<tmin):
      __pyx_t_5 = ((__pyx_v_t > 0.0) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L20_bool_binop_done;
      }
      __pyx_t_5 = ((__pyx_v_t < __pyx_v_tmin) != 0);
      __pyx_t_1 = __pyx_t_5;
      __pyx_L20_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
    }
+5687:                 tmin = t
        __pyx_v_tmin = __pyx_v_t;
+5688:         if tmin < 0:
    __pyx_t_1 = ((__pyx_v_tmin < 0.0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5689:             tmin = 0.
      __pyx_v_tmin = 0.;
 5690:         # Now that we know the closest point on the line we can compute the
 5691:         # closest point on the circle and compute the distance
+5692:         line_closest[0] = origin[0] + tmin * direction[0]
    (__pyx_v_line_closest[0]) = ((__pyx_v_origin[0]) + (__pyx_v_tmin * (__pyx_v_direction[0])));
+5693:         line_closest[1] = origin[1] + tmin * direction[1]
    (__pyx_v_line_closest[1]) = ((__pyx_v_origin[1]) + (__pyx_v_tmin * (__pyx_v_direction[1])));
+5694:         line_closest[2] = origin[2] + tmin * direction[2]
    (__pyx_v_line_closest[2]) = ((__pyx_v_origin[2]) + (__pyx_v_tmin * (__pyx_v_direction[2])));
+5695:         compute_cross_prod(circle_normal, line_closest, NxDelta)
    __pyx_f_4tofu_4geom_5_GG03_compute_cross_prod(__pyx_v_circle_normal, __pyx_v_line_closest, __pyx_v_NxDelta);
+5696:         if not (Cabs(NxDelta[0]) <= _VSMALL
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[0])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L24_bool_binop_done;
    }
/* … */
    __pyx_t_5 = ((!__pyx_t_1) != 0);
    if (__pyx_t_5) {
/* … */
    }
+5697:                 and Cabs(NxDelta[1]) <= _VSMALL
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[1])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_5) {
    } else {
      __pyx_t_1 = __pyx_t_5;
      goto __pyx_L24_bool_binop_done;
    }
+5698:                 and Cabs(NxDelta[2]) <= _VSMALL):
    __pyx_t_5 = ((fabs((__pyx_v_NxDelta[2])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    __pyx_t_1 = __pyx_t_5;
    __pyx_L24_bool_binop_done:;
+5699:             norm_ppar = Csqrt(line_closest[0]*line_closest[0]
      __pyx_v_norm_ppar = sqrt((((__pyx_v_line_closest[0]) * (__pyx_v_line_closest[0])) + ((__pyx_v_line_closest[1]) * (__pyx_v_line_closest[1]))));
 5700:                               + line_closest[1]*line_closest[1])
+5701:             circle_closest[0] = radius * line_closest[0] / norm_ppar
      (__pyx_v_circle_closest[0]) = ((__pyx_v_radius * (__pyx_v_line_closest[0])) / __pyx_v_norm_ppar);
+5702:             circle_closest[1] = radius * line_closest[1] / norm_ppar
      (__pyx_v_circle_closest[1]) = ((__pyx_v_radius * (__pyx_v_line_closest[1])) / __pyx_v_norm_ppar);
+5703:             circle_closest[2] = circle_center[2]
      (__pyx_v_circle_closest[2]) = (__pyx_v_circle_center[2]);
+5704:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5705:                 diff[i] = line_closest[i] - circle_closest[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_closest[__pyx_v_i]));
      }
+5706:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5707:             are_close = distance < eps
      __pyx_v_are_close = (__pyx_v_distance < __pyx_v_eps);
+5708:             return are_close
      __pyx_r = __pyx_v_are_close;
      goto __pyx_L0;
 5709:         else:
+5710:             diff[0] = line_closest[0] + radius
    /*else*/ {
      (__pyx_v_diff[0]) = ((__pyx_v_line_closest[0]) + __pyx_v_radius);
+5711:             diff[1] = line_closest[1]
      (__pyx_v_diff[1]) = (__pyx_v_line_closest[1]);
+5712:             diff[2] = line_closest[2] - circle_center[2]
      (__pyx_v_diff[2]) = ((__pyx_v_line_closest[2]) - (__pyx_v_circle_center[2]));
+5713:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5714:             are_close = distance < eps
      __pyx_v_are_close = (__pyx_v_distance < __pyx_v_eps);
+5715:             return are_close
      __pyx_r = __pyx_v_are_close;
      goto __pyx_L0;
    }
 5716:     else:
 5717:         # The line direction and the plane normal are parallel.
 5718:         # There is only one solution the intersection between line and plane
+5719:         if not (Cabs(DxN[0]) <= _VSMALL
  /*else*/ {
/* … */
    __pyx_t_1 = ((fabs((__pyx_v_DxN[0])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_1) {
    } else {
      __pyx_t_5 = __pyx_t_1;
      goto __pyx_L30_bool_binop_done;
    }
/* … */
    __pyx_t_1 = ((!__pyx_t_5) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5720:                 and Cabs(DxN[1]) <= _VSMALL
    __pyx_t_1 = ((fabs((__pyx_v_DxN[1])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    if (__pyx_t_1) {
    } else {
      __pyx_t_5 = __pyx_t_1;
      goto __pyx_L30_bool_binop_done;
    }
+5721:                 and Cabs(DxN[2]) <= _VSMALL):
    __pyx_t_1 = ((fabs((__pyx_v_DxN[2])) <= __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
    __pyx_t_5 = __pyx_t_1;
    __pyx_L30_bool_binop_done:;
 5722:             # The line is A+t*N but with A != C.
+5723:             t = -compute_dot_prod(direction, D)
      __pyx_v_t = (-__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_direction, __pyx_v_D));
 5724:             # We compute line closest
+5725:             line_closest[0] = origin[0] + t * direction[0]
      (__pyx_v_line_closest[0]) = ((__pyx_v_origin[0]) + (__pyx_v_t * (__pyx_v_direction[0])));
+5726:             line_closest[1] = origin[1] + t * direction[1]
      (__pyx_v_line_closest[1]) = ((__pyx_v_origin[1]) + (__pyx_v_t * (__pyx_v_direction[1])));
+5727:             line_closest[2] = origin[2] + t * direction[2]
      (__pyx_v_line_closest[2]) = ((__pyx_v_origin[2]) + (__pyx_v_t * (__pyx_v_direction[2])));
 5728:             # We compute cirlce closest
+5729:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5730:                 diff[i] = line_closest[i] - circle_center[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_center[__pyx_v_i]));
      }
+5731:             distance = radius / Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = (__pyx_v_radius / sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff)));
+5732:             circle_closest[0] = line_closest[0] * distance
      (__pyx_v_circle_closest[0]) = ((__pyx_v_line_closest[0]) * __pyx_v_distance);
+5733:             circle_closest[1] = line_closest[1] * distance
      (__pyx_v_circle_closest[1]) = ((__pyx_v_line_closest[1]) * __pyx_v_distance);
+5734:             circle_closest[2] = circ_z + (line_closest[2] - circ_z) * distance
      (__pyx_v_circle_closest[2]) = (__pyx_v_circ_z + (((__pyx_v_line_closest[2]) - __pyx_v_circ_z) * __pyx_v_distance));
+5735:             if t < 0:
      __pyx_t_1 = ((__pyx_v_t < 0.0) != 0);
      if (__pyx_t_1) {
/* … */
      }
 5736:                 # fi t is negative, we take origin as closest point
+5737:                 line_closest[0] = origin[0]
        (__pyx_v_line_closest[0]) = (__pyx_v_origin[0]);
+5738:                 line_closest[1] = origin[1]
        (__pyx_v_line_closest[1]) = (__pyx_v_origin[1]);
+5739:                 line_closest[2] = origin[2]
        (__pyx_v_line_closest[2]) = (__pyx_v_origin[2]);
+5740:             for i in range(3):
      for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;
+5741:                 diff[i] = line_closest[i] - circle_closest[i]
        (__pyx_v_diff[__pyx_v_i]) = ((__pyx_v_line_closest[__pyx_v_i]) - (__pyx_v_circle_closest[__pyx_v_i]));
      }
+5742:             distance = Csqrt(compute_dot_prod(diff, diff))
      __pyx_v_distance = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_diff, __pyx_v_diff));
+5743:             are_close = distance < eps
      __pyx_v_are_close = (__pyx_v_distance < __pyx_v_eps);
+5744:             return are_close
      __pyx_r = __pyx_v_are_close;
      goto __pyx_L0;
 5745:         else:
 5746:             # The line direction and the normal vector are on the same line
 5747:             # so C is the closest point for the circle and the distance is
 5748:             # the radius unless the ray's origin is after the circle center
+5749:             if (origin[2] * direction[2] <= circle_center[2] * direction[2]) :
    /*else*/ {
      __pyx_t_1 = ((((__pyx_v_origin[2]) * (__pyx_v_direction[2])) <= ((__pyx_v_circle_center[2]) * (__pyx_v_direction[2]))) != 0);
      if (__pyx_t_1) {
/* … */
      }
+5750:                 are_close = radius < eps
        __pyx_v_are_close = (__pyx_v_radius < __pyx_v_eps);
+5751:                 return are_close
        __pyx_r = __pyx_v_are_close;
        goto __pyx_L0;
 5752:             else:
+5753:                 t = Cabs(circle_center[2] - origin[2])
      /*else*/ {
        __pyx_v_t = fabs(((__pyx_v_circle_center[2]) - (__pyx_v_origin[2])));
+5754:                 are_close = Csqrt(radius*radius + t*t) < eps
        __pyx_v_are_close = (sqrt(((__pyx_v_radius * __pyx_v_radius) + (__pyx_v_t * __pyx_v_t))) < __pyx_v_eps);
+5755:                 return are_close
        __pyx_r = __pyx_v_are_close;
        goto __pyx_L0;
      }
    }
  }
 5756: 
 5757: 
+5758: def is_close_los_circle_vec(int nlos, int ncircles, double epsilon,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_71is_close_los_circle_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_70is_close_los_circle_vec[] = "\n    This function checks if at maximum a LOS is at a distance epsilon\n    form a cirlce. Vectorial version\n    The result is True when distance < epsilon\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `is_los_close_circle_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_71is_close_los_circle_vec = {"is_close_los_circle_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_71is_close_los_circle_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_70is_close_los_circle_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_71is_close_los_circle_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nlos;
  int __pyx_v_ncircles;
  double __pyx_v_epsilon;
  PyArrayObject *__pyx_v_dirs = 0;
  PyArrayObject *__pyx_v_oris = 0;
  PyArrayObject *__pyx_v_circle_radius = 0;
  PyArrayObject *__pyx_v_circle_z = 0;
  PyArrayObject *__pyx_v_norm_dir = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_circle_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nlos,&__pyx_n_s_ncircles,&__pyx_n_s_epsilon,&__pyx_n_s_dirs,&__pyx_n_s_oris,&__pyx_n_s_circle_radius,&__pyx_n_s_circle_z,&__pyx_n_s_norm_dir,0};
    PyObject* values[8] = {0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_70is_close_los_circle_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nlos, int __pyx_v_ncircles, double __pyx_v_epsilon, PyArrayObject *__pyx_v_dirs, PyArrayObject *__pyx_v_oris, PyArrayObject *__pyx_v_circle_radius, PyArrayObject *__pyx_v_circle_z, PyArrayObject *__pyx_v_norm_dir) {
  arrayobject *__pyx_v_res = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_circle_radius;
  __Pyx_Buffer __pyx_pybuffer_circle_radius;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_circle_z;
  __Pyx_Buffer __pyx_pybuffer_circle_z;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_dirs;
  __Pyx_Buffer __pyx_pybuffer_dirs;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_norm_dir;
  __Pyx_Buffer __pyx_pybuffer_norm_dir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_oris;
  __Pyx_Buffer __pyx_pybuffer_oris;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_circle_vec", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_norm_dir);
  __pyx_pybuffer_dirs.pybuffer.buf = NULL;
  __pyx_pybuffer_dirs.refcount = 0;
  __pyx_pybuffernd_dirs.data = NULL;
  __pyx_pybuffernd_dirs.rcbuffer = &__pyx_pybuffer_dirs;
  __pyx_pybuffer_oris.pybuffer.buf = NULL;
  __pyx_pybuffer_oris.refcount = 0;
  __pyx_pybuffernd_oris.data = NULL;
  __pyx_pybuffernd_oris.rcbuffer = &__pyx_pybuffer_oris;
  __pyx_pybuffer_circle_radius.pybuffer.buf = NULL;
  __pyx_pybuffer_circle_radius.refcount = 0;
  __pyx_pybuffernd_circle_radius.data = NULL;
  __pyx_pybuffernd_circle_radius.rcbuffer = &__pyx_pybuffer_circle_radius;
  __pyx_pybuffer_circle_z.pybuffer.buf = NULL;
  __pyx_pybuffer_circle_z.refcount = 0;
  __pyx_pybuffernd_circle_z.data = NULL;
  __pyx_pybuffernd_circle_z.rcbuffer = &__pyx_pybuffer_circle_z;
  __pyx_pybuffer_norm_dir.pybuffer.buf = NULL;
  __pyx_pybuffer_norm_dir.refcount = 0;
  __pyx_pybuffernd_norm_dir.data = NULL;
  __pyx_pybuffernd_norm_dir.rcbuffer = &__pyx_pybuffer_norm_dir;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer, (PyObject*)__pyx_v_dirs, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  }
  __pyx_pybuffernd_dirs.diminfo[0].strides = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dirs.diminfo[0].shape = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dirs.diminfo[1].strides = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dirs.diminfo[1].shape = __pyx_pybuffernd_dirs.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_oris.rcbuffer->pybuffer, (PyObject*)__pyx_v_oris, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  }
  __pyx_pybuffernd_oris.diminfo[0].strides = __pyx_pybuffernd_oris.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_oris.diminfo[0].shape = __pyx_pybuffernd_oris.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_oris.diminfo[1].strides = __pyx_pybuffernd_oris.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_oris.diminfo[1].shape = __pyx_pybuffernd_oris.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer, (PyObject*)__pyx_v_circle_radius, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  }
  __pyx_pybuffernd_circle_radius.diminfo[0].strides = __pyx_pybuffernd_circle_radius.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_circle_radius.diminfo[0].shape = __pyx_pybuffernd_circle_radius.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_circle_z, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  }
  __pyx_pybuffernd_circle_z.diminfo[0].strides = __pyx_pybuffernd_circle_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_circle_z.diminfo[0].shape = __pyx_pybuffernd_circle_z.rcbuffer->pybuffer.shape[0];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_v_norm_dir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5758, __pyx_L1_error)
  }
  __pyx_pybuffernd_norm_dir.diminfo[0].strides = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_norm_dir.diminfo[0].shape = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.shape[0];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oris.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_circle_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_radius.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_circle_z.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dirs.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oris.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF((PyObject *)__pyx_v_res);
  __Pyx_XDECREF((PyObject *)__pyx_v_norm_dir);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__228 = PyTuple_Pack(9, __pyx_n_s_nlos, __pyx_n_s_ncircles, __pyx_n_s_epsilon, __pyx_n_s_dirs, __pyx_n_s_oris, __pyx_n_s_circle_radius, __pyx_n_s_circle_z, __pyx_n_s_norm_dir, __pyx_n_s_res); if (unlikely(!__pyx_tuple__228)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__228);
  __Pyx_GIVEREF(__pyx_tuple__228);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_71is_close_los_circle_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_close_los_circle_vec, __pyx_t_2) < 0) __PYX_ERR(0, 5758, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__229 = (PyObject*)__Pyx_PyCode_New(8, 0, 9, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__228, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_is_close_los_circle_vec, 5758, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__229)) __PYX_ERR(0, 5758, __pyx_L1_error)
 5759:                              np.ndarray[double,ndim=2,mode='c'] dirs,
 5760:                              np.ndarray[double,ndim=2,mode='c'] oris,
 5761:                              np.ndarray[double,ndim=1,mode='c'] circle_radius,
 5762:                              np.ndarray[double,ndim=1,mode='c'] circle_z,
+5763:                              np.ndarray[double,ndim=1,mode='c'] norm_dir=None):
    values[7] = (PyObject *)((PyArrayObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ncircles)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 1); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_epsilon)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 2); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dirs)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 3); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_oris)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 4); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circle_radius)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 5); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_circle_z)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, 6); __PYX_ERR(0, 5758, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_norm_dir);
          if (value) { values[7] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_close_los_circle_vec") < 0)) __PYX_ERR(0, 5758, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5758, __pyx_L3_error)
    __pyx_v_ncircles = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_ncircles == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5758, __pyx_L3_error)
    __pyx_v_epsilon = __pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_epsilon == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5758, __pyx_L3_error)
    __pyx_v_dirs = ((PyArrayObject *)values[3]);
    __pyx_v_oris = ((PyArrayObject *)values[4]);
    __pyx_v_circle_radius = ((PyArrayObject *)values[5]);
    __pyx_v_circle_z = ((PyArrayObject *)values[6]);
    __pyx_v_norm_dir = ((PyArrayObject *)values[7]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_close_los_circle_vec", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5758, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_circle_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dirs), __pyx_ptype_5numpy_ndarray, 1, "dirs", 0))) __PYX_ERR(0, 5759, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_oris), __pyx_ptype_5numpy_ndarray, 1, "oris", 0))) __PYX_ERR(0, 5760, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_circle_radius), __pyx_ptype_5numpy_ndarray, 1, "circle_radius", 0))) __PYX_ERR(0, 5761, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_circle_z), __pyx_ptype_5numpy_ndarray, 1, "circle_z", 0))) __PYX_ERR(0, 5762, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_norm_dir), __pyx_ptype_5numpy_ndarray, 1, "norm_dir", 0))) __PYX_ERR(0, 5763, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_70is_close_los_circle_vec(__pyx_self, __pyx_v_nlos, __pyx_v_ncircles, __pyx_v_epsilon, __pyx_v_dirs, __pyx_v_oris, __pyx_v_circle_radius, __pyx_v_circle_z, __pyx_v_norm_dir);
 5764:     """
 5765:     This function checks if at maximum a LOS is at a distance epsilon
 5766:     form a cirlce. Vectorial version
 5767:     The result is True when distance < epsilon
 5768:     ---
 5769:     This is the PYTHON function, use only if you need this computation from
 5770:     Python, if you need it from Cython, use `is_los_close_circle_core`
 5771:     """
+5772:     cdef array res = clone(array('i'), nlos, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), __pyx_v_nlos, 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_res = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
 5773: 
+5774:     if norm_dir is None:
  __pyx_t_3 = (((PyObject *)__pyx_v_norm_dir) == Py_None);
  __pyx_t_4 = (__pyx_t_3 != 0);
  if (__pyx_t_4) {
/* … */
  }
+5775:         norm_dir = -np.ones(nlos)
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 5775, __pyx_L1_error)
    __pyx_t_7 = ((PyArrayObject *)__pyx_t_5);
    {
      __Pyx_BufFmt_StackElem __pyx_stack[1];
      __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer);
      __pyx_t_8 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack);
      if (unlikely(__pyx_t_8 < 0)) {
        PyErr_Fetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
        if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_norm_dir.rcbuffer->pybuffer, (PyObject*)__pyx_v_norm_dir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 1, 0, __pyx_stack) == -1)) {
          Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_11);
          __Pyx_RaiseBufferFallbackError();
        } else {
          PyErr_Restore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        }
        __pyx_t_9 = __pyx_t_10 = __pyx_t_11 = 0;
      }
      __pyx_pybuffernd_norm_dir.diminfo[0].strides = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_norm_dir.diminfo[0].shape = __pyx_pybuffernd_norm_dir.rcbuffer->pybuffer.shape[0];
      if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 5775, __pyx_L1_error)
    }
    __pyx_t_7 = 0;
    __Pyx_DECREF_SET(__pyx_v_norm_dir, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;
+5776:     is_close_los_circle_vec_core(nlos, ncircles,
  __pyx_f_4tofu_4geom_5_GG03_is_close_los_circle_vec_core(__pyx_v_nlos, __pyx_v_ncircles, __pyx_v_epsilon, ((double *)__pyx_v_dirs->data), ((double *)__pyx_v_oris->data), ((double *)__pyx_v_circle_radius->data), ((double *)__pyx_v_circle_z->data), ((double *)__pyx_v_norm_dir->data), __pyx_t_12);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __pyx_t_12.memview = NULL;
  __pyx_t_12.data = NULL;
 5777:                                  epsilon,
 5778:                                  <double*>dirs.data,
 5779:                                  <double*>oris.data,
 5780:                                  <double*>circle_radius.data,
 5781:                                  <double*>circle_z.data,
 5782:                                  <double*>norm_dir.data,
+5783:                                  res)
  __pyx_t_12 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_res), PyBUF_WRITABLE); if (unlikely(!__pyx_t_12.memview)) __PYX_ERR(0, 5783, __pyx_L1_error)
+5784:     return np.asarray(res, dtype=bool).reshape(nlos, ncircles)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_res));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_res));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_res));
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 5784, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_reshape); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ncircles); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5784, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_13, __pyx_t_2};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5784, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_13, __pyx_t_2};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5784, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_8, __pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_8, __pyx_t_2);
    __pyx_t_13 = 0;
    __pyx_t_2 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 5785: 
 5786: 
+5787: cdef void is_close_los_circle_vec_core(int num_los, int num_cir,
static void __pyx_f_4tofu_4geom_5_GG03_is_close_los_circle_vec_core(CYTHON_UNUSED int __pyx_v_num_los, int __pyx_v_num_cir, double __pyx_v_eps, double *__pyx_v_los_directions, double *__pyx_v_los_origins, double *__pyx_v_circle_radius, double *__pyx_v_circle_z, double *__pyx_v_norm_dir_tab, __Pyx_memviewslice __pyx_v_res) {
  int __pyx_v_i;
  int __pyx_v_ind_los;
  int __pyx_v_ind_cir;
  double *__pyx_v_dirv;
  double *__pyx_v_orig;
  double __pyx_v_radius;
  double __pyx_v_circ_z;
  double __pyx_v_norm_dir;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 5788:                                        double eps,
 5789:                                        double* los_directions,
 5790:                                        double* los_origins,
 5791:                                        double* circle_radius,
 5792:                                        double* circle_z,
 5793:                                        double* norm_dir_tab,
 5794:                                        int[::1] res) nogil:
 5795:     """
 5796:     This function computes the intersection of a Ray (or Line Of Sight)
 5797:     and a circle in 3D. It returns `kmin`, the coefficient such that the
 5798:     ray of origin O = [ori1, ori2, ori3] and of directional vector
 5799:     D = [dir1, dir2, dir3] is closest to the circle of radius `radius`
 5800:     and centered `(0, 0, circ_z)` at the point P = O + kmin * D.
 5801:     The variable `norm_dir` is the squared norm of the direction of the ray.
 5802:     This is the vectorial version, we expect the directions and origins to be:
 5803:     dirs = [dir1_los1, dir2_los1, dir3_los1, dir1_los2,...]
 5804:     oris = [ori1_los1, ori2_los1, ori3_los1, ori1_los2,...]
 5805:     res = [kmin(los1, cir1), kmin(los1, cir2),...]
 5806:     ---
 5807:     This is the PYTHON function, use only if you need this computation from
 5808:     Python, if you need it from Cython, use `dist_los_circle_core`
 5809:     """
 5810:     cdef int i, ind_los, ind_cir
 5811:     cdef double* dirv
 5812:     cdef double* orig
 5813:     cdef double radius, circ_z, norm_dir
+5814:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_dirv, __pyx_v_orig)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_dirv = ((double *)1);
                __pyx_v_orig = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
+5815:         dirv = <double*>malloc(3*sizeof(double))
                __pyx_v_dirv = ((double *)malloc((3 * (sizeof(double)))));
+5816:         orig = <double*>malloc(3*sizeof(double))
                __pyx_v_orig = ((double *)malloc((3 * (sizeof(double)))));
+5817:         for ind_los in prange(num_los):
                __pyx_t_1 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_3 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_circ_z) lastprivate(__pyx_v_i) lastprivate(__pyx_v_ind_cir) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_norm_dir) lastprivate(__pyx_v_radius)
                        #endif /* _OPENMP */
                        for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_2);
                                /* Initialize private variables to invalid values */
                                __pyx_v_circ_z = ((double)__PYX_NAN());
                                __pyx_v_i = ((int)0xbad0bad0);
                                __pyx_v_ind_cir = ((int)0xbad0bad0);
                                __pyx_v_norm_dir = ((double)__PYX_NAN());
                                __pyx_v_radius = ((double)__PYX_NAN());
+5818:             for i in range(3):
                                for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
                                  __pyx_v_i = __pyx_t_4;
+5819:                 dirv[i] = los_directions[ind_los * 3 + i]
                                  (__pyx_v_dirv[__pyx_v_i]) = (__pyx_v_los_directions[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
+5820:                 orig[i] = los_origins[ind_los * 3 + i]
                                  (__pyx_v_orig[__pyx_v_i]) = (__pyx_v_los_origins[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
                                }
+5821:             norm_dir = norm_dir_tab[ind_los]
                                __pyx_v_norm_dir = (__pyx_v_norm_dir_tab[__pyx_v_ind_los]);
+5822:             if norm_dir < 0.:
                                __pyx_t_5 = ((__pyx_v_norm_dir < 0.) != 0);
                                if (__pyx_t_5) {
/* … */
                                }
+5823:                 norm_dir = Csqrt(compute_dot_prod(dirv, dirv))
                                  __pyx_v_norm_dir = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_dirv, __pyx_v_dirv));
+5824:             for ind_cir in range(num_cir):
                                __pyx_t_4 = __pyx_v_num_cir;
                                __pyx_t_6 = __pyx_t_4;
                                for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
                                  __pyx_v_ind_cir = __pyx_t_7;
+5825:                 radius = circle_radius[ind_cir]
                                  __pyx_v_radius = (__pyx_v_circle_radius[__pyx_v_ind_cir]);
+5826:                 circ_z = circle_z[ind_cir]
                                  __pyx_v_circ_z = (__pyx_v_circle_z[__pyx_v_ind_cir]);
 5827:                 res[ind_los * num_cir
+5828:                     + ind_cir] = is_close_los_circle_core(dirv, orig, radius,
                                  __pyx_t_8 = ((__pyx_v_ind_los * __pyx_v_num_cir) + __pyx_v_ind_cir);
                                  *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_res.data) + __pyx_t_8)) )) = __pyx_f_4tofu_4geom_5_GG03_is_close_los_circle_core(__pyx_v_dirv, __pyx_v_orig, __pyx_v_radius, __pyx_v_circ_z, __pyx_v_norm_dir, __pyx_v_eps);
                                }
                            }
                        }
                    }
                }
 5829:                                                           circ_z, norm_dir, eps)
+5830:         free(dirv)
                free(__pyx_v_dirv);
+5831:         free(orig)
                free(__pyx_v_orig);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+5832:     return
  goto __pyx_L0;
 5833: 
 5834: # ==============================================================================
 5835: #
 5836: #                       DISTANCE BETWEEN LOS AND EXT-POLY
 5837: #
 5838: # ==============================================================================
 5839: 
+5840: def comp_dist_los_vpoly(double[:, ::1] ray_orig,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_73comp_dist_los_vpoly(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_72comp_dist_los_vpoly[] = "\n    This function computes the distance (and the associated k) between num_los\n    Rays (or LOS) and an `IN` structure (a polygon extruded around the axis\n    (0,0,1), eg. a flux surface).\n    For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO\n\n    Params\n    ======\n        ray_orig : (3, num_los) double array\n           LOS origin points coordinates\n        ray_vdir : (3, num_los) double array\n           LOS normalized direction vector\n        ves_poly : (2, num_vertex) double array\n           Coordinates of the vertices of the Polygon defining the 2D poloidal\n           cut of the Vessel\n        eps_<val> : double\n           Small value, acceptance of error\n    Returns\n    =======\n        kmin_vpoly : (num_los) double array\n            Of the form [k_0, k_1, ..., k_n], where k_i is the coefficient\n            such that the i-th ray (LOS) is closest to the extruded polygon\n            at the point P_i = orig[i] + kmin[i] * vdir[i]\n        dist_vpoly : (num_los) double array\n            `distance[i]` is the distance from P_i to the extruded polygon.\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `simple_dist_los_vpoly_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_73comp_dist_los_vpoly = {"comp_dist_los_vpoly", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_73comp_dist_los_vpoly, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_72comp_dist_los_vpoly};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_73comp_dist_los_vpoly(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  __Pyx_memviewslice __pyx_v_ray_orig = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ray_vdir = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_ves_poly = { 0, 0, { 0 }, { 0 }, { 0 } };
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  CYTHON_UNUSED double __pyx_v_eps_plane;
  CYTHON_UNUSED PyObject *__pyx_v_ves_type = 0;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_vpoly (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_num_threads,0};
    PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0};
    values[8] = ((PyObject*)__pyx_n_s_Tor);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly", 0, 3, 10, 1); __PYX_ERR(0, 5840, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly", 0, 3, 10, 2); __PYX_ERR(0, 5840, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[9] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "comp_dist_los_vpoly") < 0)) __PYX_ERR(0, 5840, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_ray_orig = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_orig.memview)) __PYX_ERR(0, 5840, __pyx_L3_error)
    __pyx_v_ray_vdir = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ray_vdir.memview)) __PYX_ERR(0, 5841, __pyx_L3_error)
    __pyx_v_ves_poly = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_ves_poly.memview)) __PYX_ERR(0, 5842, __pyx_L3_error)
    if (values[3]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[3]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5843, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__91;
    }
    if (values[4]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[4]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5843, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__92;
    }
    if (values[5]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5844, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__93;
    }
    if (values[6]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5844, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__94;
    }
    if (values[7]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5845, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__95;
    }
    __pyx_v_ves_type = ((PyObject*)values[8]);
    if (values[9]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[9]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5846, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly", 0, 3, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5840, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_vpoly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 5845, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_72comp_dist_los_vpoly(__pyx_self, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_72comp_dist_los_vpoly(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_ray_orig, __Pyx_memviewslice __pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, CYTHON_UNUSED double __pyx_v_eps_plane, CYTHON_UNUSED PyObject *__pyx_v_ves_type, int __pyx_v_num_threads) {
  int __pyx_v_npts_poly;
  int __pyx_v_num_los;
  int __pyx_v_ind_los;
  double *__pyx_v_res_loc;
  double __pyx_v_crit2;
  double __pyx_v_invuz;
  double __pyx_v_dpar2;
  double __pyx_v_upar2;
  double __pyx_v_upscaDp;
  double __pyx_v_crit2_base;
  arrayobject *__pyx_v_dist_vpoly = 0;
  arrayobject *__pyx_v_kmin_vpoly = 0;
  __Pyx_memviewslice __pyx_v_dist_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_kmin_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  double *__pyx_v_loc_org;
  double *__pyx_v_loc_dir;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_vpoly", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_XDECREF(__pyx_t_26);
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_vpoly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dist_vpoly);
  __Pyx_XDECREF((PyObject *)__pyx_v_kmin_vpoly);
  __PYX_XDEC_MEMVIEW(&__pyx_v_dist_view, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_kmin_view, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_orig, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ray_vdir, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_ves_poly, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__230 = PyTuple_Pack(28, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_num_threads, __pyx_n_s_npts_poly, __pyx_n_s_num_los, __pyx_n_s_ii, __pyx_n_s_ind_vert, __pyx_n_s_ind_los, __pyx_n_s_res_loc, __pyx_n_s_crit2, __pyx_n_s_invuz, __pyx_n_s_dpar2, __pyx_n_s_upar2, __pyx_n_s_upscaDp, __pyx_n_s_crit2_base, __pyx_n_s_dist_vpoly, __pyx_n_s_kmin_vpoly, __pyx_n_s_dist_view, __pyx_n_s_kmin_view, __pyx_n_s_loc_org, __pyx_n_s_loc_dir); if (unlikely(!__pyx_tuple__230)) __PYX_ERR(0, 5840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__230);
  __Pyx_GIVEREF(__pyx_tuple__230);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_73comp_dist_los_vpoly, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5840, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comp_dist_los_vpoly, __pyx_t_2) < 0) __PYX_ERR(0, 5840, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__231 = (PyObject*)__Pyx_PyCode_New(10, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__230, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_comp_dist_los_vpoly, 5840, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__231)) __PYX_ERR(0, 5840, __pyx_L1_error)
 5841:                         double[:, ::1] ray_vdir,
 5842:                         double[:, ::1] ves_poly,
+5843:                         double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__91 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__92 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+5844:                         double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__93 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__94 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+5845:                         double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__95 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 5846:                         int num_threads=16):
 5847:     """
 5848:     This function computes the distance (and the associated k) between num_los
 5849:     Rays (or LOS) and an `IN` structure (a polygon extruded around the axis
 5850:     (0,0,1), eg. a flux surface).
 5851:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 5852: 
 5853:     Params
 5854:     ======
 5855:         ray_orig : (3, num_los) double array
 5856:            LOS origin points coordinates
 5857:         ray_vdir : (3, num_los) double array
 5858:            LOS normalized direction vector
 5859:         ves_poly : (2, num_vertex) double array
 5860:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 5861:            cut of the Vessel
 5862:         eps_<val> : double
 5863:            Small value, acceptance of error
 5864:     Returns
 5865:     =======
 5866:         kmin_vpoly : (num_los) double array
 5867:             Of the form [k_0, k_1, ..., k_n], where k_i is the coefficient
 5868:             such that the i-th ray (LOS) is closest to the extruded polygon
 5869:             at the point P_i = orig[i] + kmin[i] * vdir[i]
 5870:         dist_vpoly : (num_los) double array
 5871:             `distance[i]` is the distance from P_i to the extruded polygon.
 5872:     ---
 5873:     This is the PYTHON function, use only if you need this computation from
 5874:     Python, if you need it from Cython, use `simple_dist_los_vpoly_core`
 5875:     """
+5876:     cdef int npts_poly = ves_poly.shape[1]
  __pyx_v_npts_poly = (__pyx_v_ves_poly.shape[1]);
+5877:     cdef int num_los = ray_orig.shape[1]
  __pyx_v_num_los = (__pyx_v_ray_orig.shape[1]);
 5878:     cdef int ii, ind_vert, ind_los
+5879:     cdef double* res_loc = NULL
  __pyx_v_res_loc = NULL;
 5880:     cdef double crit2, invuz,  dpar2, upar2, upscaDp
+5881:     cdef double crit2_base = eps_uz * eps_uz /400.
  __pyx_v_crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
+5882:     cdef array dist_vpoly = clone(array('d'), num_los, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), __pyx_v_num_los, 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dist_vpoly = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+5883:     cdef array kmin_vpoly = clone(array('d'), num_los, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), __pyx_v_num_los, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_kmin_vpoly = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
 5884:     cdef double[::1] dist_view, kmin_view
+5885:     dist_view = dist_vpoly
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dist_vpoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5885, __pyx_L1_error)
  __pyx_v_dist_view = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
+5886:     kmin_view = kmin_vpoly
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_kmin_vpoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5886, __pyx_L1_error)
  __pyx_v_kmin_view = __pyx_t_3;
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
 5887:     # == Defining parallel part ================================================
+5888:     with nogil, parallel(num_threads=num_threads):
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_res_loc)        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_res_loc) num_threads(__pyx_v_num_threads)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
                __pyx_v_res_loc = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L5;
        }
        __pyx_L5:;
      }
  }
 5889:         # We use local arrays for each thread so...
+5890:         loc_org   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_org = ((double *)malloc(((sizeof(double)) * 3)));
+5891:         loc_dir   = <double *> malloc(sizeof(double) * 3)
                __pyx_v_loc_dir = ((double *)malloc(((sizeof(double)) * 3)));
+5892:         res_loc = <double *> malloc(2*sizeof(double))
                __pyx_v_res_loc = ((double *)malloc((2 * (sizeof(double)))));
 5893:         # == The parallelization over the LOS ==================================
+5894:         for ind_los in prange(num_los, schedule='dynamic'):
                __pyx_t_4 = __pyx_v_num_los;
                if (1 == 0) abort();
                {
                    __pyx_t_6 = (__pyx_t_4 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_6 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dpar2) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_6; __pyx_t_5++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_5);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+5895:             loc_org[0] = ray_orig[0, ind_los]
                                __pyx_t_7 = 0;
                                __pyx_t_8 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_7 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_8)) )));
+5896:             loc_org[1] = ray_orig[1, ind_los]
                                __pyx_t_9 = 1;
                                __pyx_t_10 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_9 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_10)) )));
+5897:             loc_org[2] = ray_orig[2, ind_los]
                                __pyx_t_11 = 2;
                                __pyx_t_12 = __pyx_v_ind_los;
                                (__pyx_v_loc_org[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_orig.data + __pyx_t_11 * __pyx_v_ray_orig.strides[0]) )) + __pyx_t_12)) )));
+5898:             loc_dir[0] = ray_vdir[0, ind_los]
                                __pyx_t_13 = 0;
                                __pyx_t_14 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[0]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_13 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_14)) )));
+5899:             loc_dir[1] = ray_vdir[1, ind_los]
                                __pyx_t_15 = 1;
                                __pyx_t_16 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[1]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_15 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_16)) )));
+5900:             loc_dir[2] = ray_vdir[2, ind_los]
                                __pyx_t_17 = 2;
                                __pyx_t_18 = __pyx_v_ind_los;
                                (__pyx_v_loc_dir[2]) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ray_vdir.data + __pyx_t_17 * __pyx_v_ray_vdir.strides[0]) )) + __pyx_t_18)) )));
 5901:             # -- Computing values that depend on the LOS/ray -------------------
+5902:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+5903:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+5904:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+5905:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+5906:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
+5907:             simple_dist_los_vpoly_core(loc_org, loc_dir,
                                __pyx_f_4tofu_4geom_5_GG03_simple_dist_los_vpoly_core(__pyx_v_loc_org, __pyx_v_loc_dir, (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_19 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_20)) )))), (&(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_21 * __pyx_v_ves_poly.strides[0]) )) + __pyx_t_22)) )))), __pyx_v_npts_poly, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_res_loc);
+5908:                                      &ves_poly[0][0],
                                __pyx_t_19 = 0;
                                __pyx_t_20 = 0;
+5909:                                      &ves_poly[1][0],
                                __pyx_t_21 = 1;
                                __pyx_t_22 = 0;
 5910:                                      npts_poly, upscaDp,
 5911:                                      upar2, dpar2,
 5912:                                      invuz, crit2,
 5913:                                      eps_uz, eps_vz,
 5914:                                      eps_a, eps_b,
 5915:                                      res_loc)
+5916:             dist_view[ind_los] = res_loc[1]
                                __pyx_t_23 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_dist_view.data) + __pyx_t_23)) )) = (__pyx_v_res_loc[1]);
+5917:             kmin_view[ind_los] = res_loc[0]
                                __pyx_t_24 = __pyx_v_ind_los;
                                *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_kmin_view.data) + __pyx_t_24)) )) = (__pyx_v_res_loc[0]);
                            }
                        }
                    }
                }
+5918:         free(loc_org)
                free(__pyx_v_loc_org);
+5919:         free(loc_dir)
                free(__pyx_v_loc_dir);
+5920:         free(res_loc)
                free(__pyx_v_res_loc);
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+5921:     return np.asarray(kmin_vpoly), np.asarray(dist_vpoly)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_25))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_25);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_25);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_25, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_25, __pyx_t_2, ((PyObject *)__pyx_v_kmin_vpoly)) : __Pyx_PyObject_CallOneArg(__pyx_t_25, ((PyObject *)__pyx_v_kmin_vpoly));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_26))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_26);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_26);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_26, function);
    }
  }
  __pyx_t_25 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_26, __pyx_t_2, ((PyObject *)__pyx_v_dist_vpoly)) : __Pyx_PyObject_CallOneArg(__pyx_t_26, ((PyObject *)__pyx_v_dist_vpoly));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_25)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_25);
  __Pyx_DECREF(__pyx_t_26); __pyx_t_26 = 0;
  __pyx_t_26 = PyTuple_New(2); if (unlikely(!__pyx_t_26)) __PYX_ERR(0, 5921, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_26);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_26, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_25);
  PyTuple_SET_ITEM(__pyx_t_26, 1, __pyx_t_25);
  __pyx_t_1 = 0;
  __pyx_t_25 = 0;
  __pyx_r = __pyx_t_26;
  __pyx_t_26 = 0;
  goto __pyx_L0;
 5922: 
 5923: 
+5924: def comp_dist_los_vpoly_vec(int nvpoly, int nlos,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_75comp_dist_los_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_74comp_dist_los_vpoly_vec[] = "\n    This function computes the distance (and the associated k) between num_los\n    Rays (or LOS) and several `IN` structures (polygons extruded around the axis\n    (0,0,1), eg. flux surfaces).\n    For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO\n\n    Params\n    ======\n        nvpoly : int\n           Number of flux surfaces\n        nlos : int\n           Number of LOS\n        ray_orig : (3, num_los) double array\n           LOS origin points coordinates\n        ray_vdir : (3, num_los) double array\n           LOS normalized direction vector\n        ves_poly : (num_pol, 2, num_vertex) double array\n           Coordinates of the vertices of the Polygon defining the 2D poloidal\n           cut of the different IN surfaces\n           WARNING : we suppose all poly are nested in each other,\n                     from inner to outer\n        eps_<val> : double\n           Small value, acceptance of error\n    Returns\n    =======\n        kmin_vpoly : (npoly, num_los) double array\n            Of the form [k_00, k_01, ..., k_0n, k_10, k_11, ..., k_1n, ...]\n            where k_ij is the coefficient for the j-th flux surface\n            such that the i-th ray (LOS) is closest to the extruded polygon\n            at the point P_i = orig[i] + kmin[i] * vdir[i]\n        dist_vpoly : (npoly, num_los) double array\n            `distance[i * num_poly + j]` is the distance from P_i to the i-th\n            extruded poly.\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `comp_dist_los_vpoly_vec_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_75comp_dist_los_vpoly_vec = {"comp_dist_los_vpoly_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_75comp_dist_los_vpoly_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_74comp_dist_los_vpoly_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_75comp_dist_los_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nvpoly;
  int __pyx_v_nlos;
  PyArrayObject *__pyx_v_ray_orig = 0;
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ves_poly = 0;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  PyObject *__pyx_v_algo_type = 0;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_vpoly_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nvpoly,&__pyx_n_s_nlos,&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_algo_type,&__pyx_n_s_num_threads,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[10] = ((PyObject*)__pyx_n_s_Tor);
    values[11] = ((PyObject*)__pyx_n_s_simple);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nvpoly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly_vec", 0, 5, 13, 1); __PYX_ERR(0, 5924, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly_vec", 0, 5, 13, 2); __PYX_ERR(0, 5924, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly_vec", 0, 5, 13, 3); __PYX_ERR(0, 5924, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly_vec", 0, 5, 13, 4); __PYX_ERR(0, 5924, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_algo_type);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "comp_dist_los_vpoly_vec") < 0)) __PYX_ERR(0, 5924, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nvpoly = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nvpoly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5924, __pyx_L3_error)
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5924, __pyx_L3_error)
    __pyx_v_ray_orig = ((PyArrayObject *)values[2]);
    __pyx_v_ray_vdir = ((PyArrayObject *)values[3]);
    __pyx_v_ves_poly = ((PyArrayObject *)values[4]);
    if (values[5]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5928, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__96;
    }
    if (values[6]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5928, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__97;
    }
    if (values[7]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5929, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__98;
    }
    if (values[8]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5929, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__99;
    }
    if (values[9]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 5930, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__100;
    }
    __pyx_v_ves_type = ((PyObject*)values[10]);
    __pyx_v_algo_type = ((PyObject*)values[11]);
    if (values[12]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5931, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("comp_dist_los_vpoly_vec", 0, 5, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5924, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 5925, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 5926, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_poly), __pyx_ptype_5numpy_ndarray, 1, "ves_poly", 0))) __PYX_ERR(0, 5927, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 5930, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_algo_type), (&PyString_Type), 1, "algo_type", 1))) __PYX_ERR(0, 5931, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_74comp_dist_los_vpoly_vec(__pyx_self, __pyx_v_nvpoly, __pyx_v_nlos, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_74comp_dist_los_vpoly_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nvpoly, int __pyx_v_nlos, PyArrayObject *__pyx_v_ray_orig, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, int __pyx_v_num_threads) {
  PyObject *__pyx_v_warn = NULL;
  arrayobject *__pyx_v_kmin_tab = 0;
  arrayobject *__pyx_v_dist_tab = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ves_poly;
  __Pyx_Buffer __pyx_pybuffer_ves_poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_vpoly_vec", 0);
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ves_poly.pybuffer.buf = NULL;
  __pyx_pybuffer_ves_poly.refcount = 0;
  __pyx_pybuffernd_ves_poly.data = NULL;
  __pyx_pybuffernd_ves_poly.rcbuffer = &__pyx_pybuffer_ves_poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5924, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_orig.diminfo[1].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_orig.diminfo[1].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5924, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_vdir.diminfo[1].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_vdir.diminfo[1].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_ves_poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 5924, __pyx_L1_error)
  }
  __pyx_pybuffernd_ves_poly.diminfo[0].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ves_poly.diminfo[0].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ves_poly.diminfo[1].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ves_poly.diminfo[1].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ves_poly.diminfo[2].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ves_poly.diminfo[2].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[2];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.comp_dist_los_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_kmin_tab);
  __Pyx_XDECREF((PyObject *)__pyx_v_dist_tab);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__232 = PyTuple_Pack(16, __pyx_n_s_nvpoly, __pyx_n_s_nlos, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_algo_type, __pyx_n_s_num_threads, __pyx_n_s_warn, __pyx_n_s_kmin_tab, __pyx_n_s_dist_tab); if (unlikely(!__pyx_tuple__232)) __PYX_ERR(0, 5924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__232);
  __Pyx_GIVEREF(__pyx_tuple__232);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_75comp_dist_los_vpoly_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5924, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_comp_dist_los_vpoly_vec, __pyx_t_2) < 0) __PYX_ERR(0, 5924, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__233 = (PyObject*)__Pyx_PyCode_New(13, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__232, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_comp_dist_los_vpoly_vec, 5924, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__233)) __PYX_ERR(0, 5924, __pyx_L1_error)
 5925:                             np.ndarray[double,ndim=2,mode='c'] ray_orig,
 5926:                             np.ndarray[double,ndim=2,mode='c'] ray_vdir,
 5927:                             np.ndarray[double,ndim=3,mode='c'] ves_poly,
+5928:                             double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__96 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__97 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+5929:                             double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__98 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__99 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+5930:                             double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__100 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 5931:                             str algo_type='simple', int num_threads=16):
 5932:     """
 5933:     This function computes the distance (and the associated k) between num_los
 5934:     Rays (or LOS) and several `IN` structures (polygons extruded around the axis
 5935:     (0,0,1), eg. flux surfaces).
 5936:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 5937: 
 5938:     Params
 5939:     ======
 5940:         nvpoly : int
 5941:            Number of flux surfaces
 5942:         nlos : int
 5943:            Number of LOS
 5944:         ray_orig : (3, num_los) double array
 5945:            LOS origin points coordinates
 5946:         ray_vdir : (3, num_los) double array
 5947:            LOS normalized direction vector
 5948:         ves_poly : (num_pol, 2, num_vertex) double array
 5949:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 5950:            cut of the different IN surfaces
 5951:            WARNING : we suppose all poly are nested in each other,
 5952:                      from inner to outer
 5953:         eps_<val> : double
 5954:            Small value, acceptance of error
 5955:     Returns
 5956:     =======
 5957:         kmin_vpoly : (npoly, num_los) double array
 5958:             Of the form [k_00, k_01, ..., k_0n, k_10, k_11, ..., k_1n, ...]
 5959:             where k_ij is the coefficient for the j-th flux surface
 5960:             such that the i-th ray (LOS) is closest to the extruded polygon
 5961:             at the point P_i = orig[i] + kmin[i] * vdir[i]
 5962:         dist_vpoly : (npoly, num_los) double array
 5963:             `distance[i * num_poly + j]` is the distance from P_i to the i-th
 5964:             extruded poly.
 5965:     ---
 5966:     This is the PYTHON function, use only if you need this computation from
 5967:     Python, if you need it from Cython, use `comp_dist_los_vpoly_vec_core`
 5968:     """
+5969:     if not algo_type.lower() == "simple" or not ves_type.lower() == "tor":
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_algo_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simple, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5969, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = ((!__pyx_t_3) != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 5969, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+5970:         assert False, "The function is only implemented with the simple"\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
+5971:             + " algorithm and for toroidal vessels... Sorry!"
        __pyx_t_2 = PyNumber_Add(__pyx_kp_s_The_function_is_only_implemented, __pyx_kp_s_algorithm_and_for_toroidal_vess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5971, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 5970, __pyx_L1_error)
      }
    }
    #endif
+5972:     from warnings import warn
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_warn);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_2, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_warn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_warn = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5973:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__101, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__101 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(0, 5973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__101);
  __Pyx_GIVEREF(__pyx_tuple__101);
 5974:          Warning)
 5975: 
+5976:     cdef array kmin_tab = clone(array('d'), nvpoly*nlos, True)
  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_5), (__pyx_v_nvpoly * __pyx_v_nlos), 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5976, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_v_kmin_tab = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+5977:     cdef array dist_tab = clone(array('d'), nvpoly*nlos, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_nvpoly * __pyx_v_nlos), 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dist_tab = ((arrayobject *)__pyx_t_5);
  __pyx_t_5 = 0;
+5978:     comp_dist_los_vpoly_vec_core(nvpoly, nlos,
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.num_threads = __pyx_v_num_threads;
  __pyx_f_4tofu_4geom_5_GG03_comp_dist_los_vpoly_vec_core(__pyx_v_nvpoly, __pyx_v_nlos, ((double *)__pyx_v_ray_orig->data), ((double *)__pyx_v_ray_vdir->data), __pyx_t_6, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_t_7, __pyx_t_8, &__pyx_t_9); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __pyx_t_6.memview = NULL;
  __pyx_t_6.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __pyx_t_7.memview = NULL;
  __pyx_t_7.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __pyx_t_8.memview = NULL;
  __pyx_t_8.data = NULL;
 5979:                                  <double*>ray_orig.data,
 5980:                                  <double*>ray_vdir.data,
+5981:                                  ves_poly,
  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(((PyObject *)__pyx_v_ves_poly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 5981, __pyx_L1_error)
 5982:                                  eps_uz, eps_a,
 5983:                                  eps_vz, eps_b,
 5984:                                  eps_plane,
 5985:                                  ves_type,
 5986:                                  algo_type,
+5987:                                  kmin_tab, dist_tab,
  __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_kmin_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 5987, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dist_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 5987, __pyx_L1_error)
 5988:                                  num_threads)
+5989:     return np.asarray(kmin_tab).reshape(nlos, nvpoly),\
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_asarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_10, ((PyObject *)__pyx_v_kmin_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_11, ((PyObject *)__pyx_v_kmin_tab));
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reshape); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_nvpoly); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_12 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_2, __pyx_t_10};
    __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5989, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_2, __pyx_t_10};
    __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5989, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_13, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_13, __pyx_t_10);
    __pyx_t_2 = 0;
    __pyx_t_10 = 0;
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_14, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5989, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_11);
  __pyx_t_5 = 0;
  __pyx_t_11 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
+5990:         np.asarray(dist_tab).reshape(nlos, nvpoly)
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_14 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_10, ((PyObject *)__pyx_v_dist_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_dist_tab));
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_10 = __Pyx_PyInt_From_int(__pyx_v_nvpoly); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_12 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_12)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_14, __pyx_t_10};
    __pyx_t_11 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5990, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_12, __pyx_t_14, __pyx_t_10};
    __pyx_t_11 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5990, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 5990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_12) {
      __Pyx_GIVEREF(__pyx_t_12); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_12); __pyx_t_12 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_13, __pyx_t_14);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_13, __pyx_t_10);
    __pyx_t_14 = 0;
    __pyx_t_10 = 0;
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_15, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 5990, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 5991: 
 5992: 
+5993: cdef void comp_dist_los_vpoly_vec_core(int num_poly, int nlos,
static void __pyx_f_4tofu_4geom_5_GG03_comp_dist_los_vpoly_vec_core(int __pyx_v_num_poly, CYTHON_UNUSED int __pyx_v_nlos, double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, CYTHON_UNUSED double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, __Pyx_memviewslice __pyx_v_res_k, __Pyx_memviewslice __pyx_v_res_dist, struct __pyx_opt_args_4tofu_4geom_5_GG03_comp_dist_los_vpoly_vec_core *__pyx_optional_args) {
  int __pyx_v_i;
  int __pyx_v_ind_los;
  int __pyx_v_ind_pol;
  int __pyx_v_ind_pol2;
  int __pyx_v_npts_poly;
  double *__pyx_v_loc_res;
  double *__pyx_v_loc_dir;
  double *__pyx_v_loc_org;
  double __pyx_v_crit2;
  double __pyx_v_invuz;
  double __pyx_v_dpar2;
  double __pyx_v_upar2;
  double __pyx_v_upscaDp;
  double __pyx_v_crit2_base;
  PyObject *__pyx_v_warn = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("comp_dist_los_vpoly_vec_core", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_WriteUnraisable("tofu.geom._GG03.comp_dist_los_vpoly_vec_core", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_comp_dist_los_vpoly_vec_core {
  int __pyx_n;
  int num_threads;
};
 5994:                                        double* ray_orig,
 5995:                                        double* ray_vdir,
 5996:                                        double[:,:,::1] ves_poly,
 5997:                                        double eps_uz,
 5998:                                        double eps_a,
 5999:                                        double eps_vz,
 6000:                                        double eps_b,
 6001:                                        double eps_plane,
 6002:                                        str ves_type,
 6003:                                        str algo_type,
 6004:                                        double[::1] res_k,
 6005:                                        double[::1] res_dist,
 6006:                                        int num_threads=16):
 6007:     """
 6008:     This function computes the distance (and the associated k) between nlos
 6009:     Rays (or LOS) and several `IN` structures (polygons extruded around the axis
 6010:     (0,0,1), eg. flux surfaces).
 6011:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 6012: 
 6013:     Params
 6014:     ======
 6015:         num_poly : int
 6016:            Number of flux surfaces
 6017:         nlos : int
 6018:            Number of LOS
 6019:         ray_orig : (3, nlos) double array
 6020:            LOS origin points coordinates
 6021:         ray_vdir : (3, nlos) double array
 6022:            LOS normalized direction vector
 6023:         ves_poly : (num_pol, 2, num_vertex) double array
 6024:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6025:            cut of the different IN surfaces.
 6026:            WARNING : we suppose all poly are nested in each other,
 6027:                      from inner to outer
 6028:         eps_<val> : double
 6029:            Small value, acceptance of error
 6030:     Returns
 6031:     =======
 6032:         kmin_vpoly : (npoly, nlos) double array
 6033:             Of the form [k_00, k_01, ..., k_0n, k_10, k_11, ..., k_1n, ...]
 6034:             where k_ij is the coefficient for the j-th flux surface
 6035:             such that the i-th ray (LOS) is closest to the extruded polygon
 6036:             at the point P_i = orig[i] + kmin[i] * vdir[i]
 6037:         dist_vpoly : (npoly, nlos) double array
 6038:             `distance[j, i]` is the distance from P_i to the i-th extruded poly.
 6039:     ---
 6040:     This is the CYTHON function, use only if you need this computation from
 6041:     Cython, if you need it from Python, use `comp_dist_los_vpoly_vec`
 6042:     """
 6043:     cdef int i, ind_los, ind_pol, ind_pol2
 6044:     cdef int npts_poly
 6045:     cdef double* loc_res
 6046:     cdef double* loc_dir
 6047:     cdef double* loc_org
 6048:     cdef double* lpolyx
 6049:     cdef double* lpolyy
 6050:     cdef double crit2, invuz,  dpar2, upar2, upscaDp
+6051:     cdef double crit2_base = eps_uz * eps_uz /400.
  __pyx_v_crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
 6052: 
+6053:     if not algo_type.lower() == "simple" or not ves_type.lower() == "tor":
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_algo_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simple, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = ((!__pyx_t_3) != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6053, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 6053, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+6054:         assert False, "The function is only implemented with the simple"\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
+6055:             + " algorithm and for toroidal vessels... Sorry!"
        __pyx_t_2 = PyNumber_Add(__pyx_kp_s_The_function_is_only_implemented, __pyx_kp_s_algorithm_and_for_toroidal_vess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6055, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 6054, __pyx_L1_error)
      }
    }
    #endif
+6056:     from warnings import warn
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_warn);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_2, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_warn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_warn = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6057:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__102, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__102 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(0, 6057, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__102);
  __Pyx_GIVEREF(__pyx_tuple__102);
 6058:          Warning)
 6059: 
 6060:     # == Defining parallel part ================================================
+6061:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_loc_res)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
                __pyx_v_loc_res = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }
 6062:         # We use local arrays for each thread so...
+6063:         loc_dir = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_dir = ((double *)malloc((3 * (sizeof(double)))));
+6064:         loc_org = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_org = ((double *)malloc((3 * (sizeof(double)))));
+6065:         loc_res = <double*>malloc(2*sizeof(double))
                __pyx_v_loc_res = ((double *)malloc((2 * (sizeof(double)))));
 6066:         # == The parallelization over the LOS ==================================
+6067:         for ind_los in prange(nlos, schedule='dynamic'):
                __pyx_t_6 = __pyx_v_nlos;
                if (1 == 0) abort();
                {
                    __pyx_t_8 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_8 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dpar2) lastprivate(__pyx_v_i) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_pol) lastprivate(__pyx_v_ind_pol2) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_npts_poly) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_7);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_i = ((int)0xbad0bad0);
                                __pyx_v_ind_pol = ((int)0xbad0bad0);
                                __pyx_v_ind_pol2 = ((int)0xbad0bad0);
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_npts_poly = ((int)0xbad0bad0);
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+6068:             for i in range(3):
                                for (__pyx_t_9 = 0; __pyx_t_9 < 3; __pyx_t_9+=1) {
                                  __pyx_v_i = __pyx_t_9;
+6069:                 loc_dir[i] = ray_vdir[ind_los * 3 + i]
                                  (__pyx_v_loc_dir[__pyx_v_i]) = (__pyx_v_ray_vdir[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
+6070:                 loc_org[i] = ray_orig[ind_los * 3 + i]
                                  (__pyx_v_loc_org[__pyx_v_i]) = (__pyx_v_ray_orig[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
                                }
 6071:             # -- Computing values that depend on the LOS/ray -------------------
+6072:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+6073:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+6074:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+6075:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+6076:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
 6077:             # -- Looping over each flux surface---------------------------------
+6078:             for ind_pol in range(num_poly):
                                __pyx_t_9 = __pyx_v_num_poly;
                                __pyx_t_10 = __pyx_t_9;
                                for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
                                  __pyx_v_ind_pol = __pyx_t_11;
+6079:                 npts_poly = ves_poly[ind_pol].shape[1]
                                  __pyx_t_12.data = __pyx_v_ves_poly.data;
                                  __pyx_t_12.memview = __pyx_v_ves_poly.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_ind_pol;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[0];
        if ((0)) __PYX_ERR(0, 6079, __pyx_L15_error)
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_ves_poly.shape[1];
__pyx_t_12.strides[0] = __pyx_v_ves_poly.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

__pyx_t_12.shape[1] = __pyx_v_ves_poly.shape[2];
__pyx_t_12.strides[1] = __pyx_v_ves_poly.strides[2];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_v_npts_poly = (__pyx_t_12.shape[1]);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 0);
                                  __pyx_t_12.memview = NULL;
                                  __pyx_t_12.data = NULL;
+6080:                 simple_dist_los_vpoly_core(loc_org, loc_dir,
                                  __pyx_f_4tofu_4geom_5_GG03_simple_dist_los_vpoly_core(__pyx_v_loc_org, __pyx_v_loc_dir, (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_13 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_14 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_15)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_16 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_17 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_18)) )))), __pyx_v_npts_poly, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_loc_res);
+6081:                                            &ves_poly[ind_pol][0][0],
                                  __pyx_t_13 = __pyx_v_ind_pol;
                                  __pyx_t_14 = 0;
                                  __pyx_t_15 = 0;
+6082:                                            &ves_poly[ind_pol][1][0],
                                  __pyx_t_16 = __pyx_v_ind_pol;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = 0;
 6083:                                            npts_poly, upscaDp,
 6084:                                            upar2, dpar2,
 6085:                                            invuz, crit2,
 6086:                                            eps_uz, eps_vz,
 6087:                                            eps_a, eps_b,
 6088:                                            loc_res)
+6089:                 res_k[ind_los * num_poly + ind_pol] = loc_res[0]
                                  __pyx_t_19 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol);
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_k.data) + __pyx_t_19)) )) = (__pyx_v_loc_res[0]);
+6090:                 res_dist[ind_los * num_poly + ind_pol] = loc_res[1]
                                  __pyx_t_20 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol);
                                  *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_dist.data) + __pyx_t_20)) )) = (__pyx_v_loc_res[1]);
+6091:                 if not loc_res[1] == loc_res[1] : #is nan
                                  __pyx_t_1 = ((!(((__pyx_v_loc_res[1]) == (__pyx_v_loc_res[1])) != 0)) != 0);
                                  if (__pyx_t_1) {
/* … */
                                  }
                                  __pyx_L19_continue:;
                                }
                                goto __pyx_L25;
                                __pyx_L15_error:;
                                {
                                    #ifdef WITH_THREAD
                                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                    #endif
                                    #ifdef _OPENMP
                                    #pragma omp flush(__pyx_parallel_exc_type)
                                    #endif /* _OPENMP */
                                    if (!__pyx_parallel_exc_type) {
                                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                                    }
                                    #ifdef WITH_THREAD
                                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                    #endif
                                }
                                __pyx_parallel_why = 4;
                                goto __pyx_L24;
                                __pyx_L24:;
                                #ifdef _OPENMP
                                #pragma omp critical(__pyx_parallel_lastprivates0)
                                #endif /* _OPENMP */
                                {
                                    __pyx_parallel_temp0 = __pyx_v_crit2;
                                    __pyx_parallel_temp1 = __pyx_v_dpar2;
                                    __pyx_parallel_temp2 = __pyx_v_i;
                                    __pyx_parallel_temp3 = __pyx_v_ind_los;
                                    __pyx_parallel_temp4 = __pyx_v_ind_pol;
                                    __pyx_parallel_temp5 = __pyx_v_ind_pol2;
                                    __pyx_parallel_temp6 = __pyx_v_invuz;
                                    __pyx_parallel_temp7 = __pyx_v_npts_poly;
                                    __pyx_parallel_temp8 = __pyx_v_upar2;
                                    __pyx_parallel_temp9 = __pyx_v_upscaDp;
                                }
                                __pyx_L25:;
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_why)
                                #endif /* _OPENMP */
                            }
                        }
                    }
                    if (__pyx_parallel_exc_type) {
                      /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
                      __pyx_parallel_why = 4;
                    }
                    if (__pyx_parallel_why) {
                      __pyx_v_crit2 = __pyx_parallel_temp0;
                      __pyx_v_dpar2 = __pyx_parallel_temp1;
                      __pyx_v_i = __pyx_parallel_temp2;
                      __pyx_v_ind_los = __pyx_parallel_temp3;
                      __pyx_v_ind_pol = __pyx_parallel_temp4;
                      __pyx_v_ind_pol2 = __pyx_parallel_temp5;
                      __pyx_v_invuz = __pyx_parallel_temp6;
                      __pyx_v_npts_poly = __pyx_parallel_temp7;
                      __pyx_v_upar2 = __pyx_parallel_temp8;
                      __pyx_v_upscaDp = __pyx_parallel_temp9;
                      switch (__pyx_parallel_why) {
                            case 4:
                        {
                            #ifdef WITH_THREAD
                            PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                            #endif
                            __Pyx_GIVEREF(__pyx_parallel_exc_type);
                            __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                            __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                            #ifdef WITH_THREAD
                            __Pyx_PyGILState_Release(__pyx_gilstate_save);
                            #endif
                        }
                        goto __pyx_L11_error;
                      }
                    }
                }
+6092:                     for ind_pol2 in range(ind_pol, num_poly):
                                    __pyx_t_21 = __pyx_v_num_poly;
                                    __pyx_t_22 = __pyx_t_21;
                                    for (__pyx_t_23 = __pyx_v_ind_pol; __pyx_t_23 < __pyx_t_22; __pyx_t_23+=1) {
                                      __pyx_v_ind_pol2 = __pyx_t_23;
+6093:                         res_k[ind_los * num_poly + ind_pol2] = Cnan
                                      __pyx_t_24 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol2);
                                      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_k.data) + __pyx_t_24)) )) = NAN;
+6094:                         res_dist[ind_los * num_poly + ind_pol2] = Cnan
                                      __pyx_t_25 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol2);
                                      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_res_dist.data) + __pyx_t_25)) )) = NAN;
                                    }
+6095:                     continue
                                    goto __pyx_L19_continue;
+6096:         free(loc_dir)
                free(__pyx_v_loc_dir);
+6097:         free(loc_org)
                free(__pyx_v_loc_org);
+6098:         free(loc_res)
                free(__pyx_v_loc_res);
                goto __pyx_L27;
                __pyx_L11_error:;
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #ifdef _OPENMP
                    #pragma omp flush(__pyx_parallel_exc_type)
                    #endif /* _OPENMP */
                    if (!__pyx_parallel_exc_type) {
                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                    }
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                __pyx_parallel_why = 4;
                goto __pyx_L27;
                __pyx_L27:;
                #ifdef _OPENMP
                Py_END_ALLOW_THREADS
                #else
{
#ifdef WITH_THREAD
                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                #endif
                #endif /* _OPENMP */
                /* Clean up any temporaries */
                __PYX_XDEC_MEMVIEW(&__pyx_t_12, 0);
                #ifdef WITH_THREAD
                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                #endif
                #ifndef _OPENMP
}
#endif /* _OPENMP */
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+6099:     return
  goto __pyx_L0;
 6100: 
 6101: 
+6102: cdef inline void simple_dist_los_vpoly_core(const double[3] ray_orig,
static CYTHON_INLINE void __pyx_f_4tofu_4geom_5_GG03_simple_dist_los_vpoly_core(double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, double const *__pyx_v_lpolyx, double const *__pyx_v_lpolyy, int const __pyx_v_nvert, double const __pyx_v_upscaDp, double const __pyx_v_upar2, double const __pyx_v_dpar2, double const __pyx_v_invuz, double const __pyx_v_crit2, CYTHON_UNUSED double const __pyx_v_eps_uz, double const __pyx_v_eps_vz, double const __pyx_v_eps_a, double const __pyx_v_eps_b, double *__pyx_v_res_final) {
  int __pyx_v_jj;
  CYTHON_UNUSED int __pyx_v_indin;
  CYTHON_UNUSED int __pyx_v_indout;
  double __pyx_v_norm_dir2;
  double __pyx_v_norm_dir2_ori;
  double __pyx_v_radius_z;
  double __pyx_v_q;
  double __pyx_v_coeff;
  double __pyx_v_sqd;
  double __pyx_v_k;
  double __pyx_v_v0;
  double __pyx_v_v1;
  double __pyx_v_val_a;
  double __pyx_v_val_b;
  double __pyx_v_res_a[2];
  double __pyx_v_res_b[2];
  double __pyx_v_circle_tangent[3];
  double __pyx_v_rdotvec;
/* … */
  /* function exit code */
  __pyx_L0:;
}
 6103:                                             const double[3] ray_vdir,
 6104:                                             const double* lpolyx,
 6105:                                             const double* lpolyy,
 6106:                                             const int nvert,
 6107:                                             const double upscaDp,
 6108:                                             const double upar2,
 6109:                                             const double dpar2,
 6110:                                             const double invuz,
 6111:                                             const double crit2,
 6112:                                             const double eps_uz,
 6113:                                             const double eps_vz,
 6114:                                             const double eps_a,
 6115:                                             const double eps_b,
 6116:                                             double* res_final) nogil:
 6117:     """
 6118:     This function computes the distance (and the associated k) between a Ray
 6119:     (or Line Of Sight) and an `IN` structure (a polygon extruded around the axis
 6120:     (0,0,1), eg. a flux surface).
 6121:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 6122: 
 6123:     Params
 6124:     ======
 6125:         ray_orig : (3) double array
 6126:            LOS origin point coordinates, noted often : `u`
 6127:         ray_vdir : (3) double array
 6128:            LOS normalized direction vector, noted often : `D`
 6129:         lpolyx : (num_vertex) double array
 6130:            1st coordinates of the vertices of the Polygon defining the poloidal
 6131:            cut of the Vessel
 6132:         lpolyy : (num_vertex) double array
 6133:            2nd coordinates of the vertices of the Polygon defining the poloidal
 6134:            cut of the Vessel
 6135:         nvert : integer
 6136:            number of vertices describing the polygon
 6137:         upscaDp : double
 6138:            if u = [ux, uy, uz] is the direction of the ray, and D=[dx, dy, dz]
 6139:            its origin, then upscaDp = ux*dx + uy*dy
 6140:         upar2 : double
 6141:            if u = [ux, uy, uz] is the direction of the ray, and D=[dx, dy, dz]
 6142:            its origin, then upar2 = ux*ux + uy*uy
 6143:         dpar2 : double
 6144:            if u = [ux, uy, uz] is the direction of the ray, and D=[dx, dy, dz]
 6145:            its origin, then dpar2 = dx*dx + dy*dy
 6146:         invuz : double
 6147:         eps_<val> : double
 6148:            Small value, acceptance of error
 6149:     Returns
 6150:     =======
 6151:         kmin_vpoly : (num_los) double array
 6152:             Of the form [k_0, k_1, ..., k_n], where k_i is the coefficient
 6153:             such that the i-th ray (LOS) is closest to the extruded polygon
 6154:             at the point P_i = orig[i] + kmin[i] * vdir[i]
 6155:         dist_vpoly : (num_los) double array
 6156:             `distance[i]` is the distance from P_i to the extruded polygon.
 6157:              if the i-th LOS intersects the poly, then distance[i] = Cnan
 6158:     ---
 6159:     This is the Cython version, only accessible from cython. If you need
 6160:     to use it from Python please use: comp_dist_los_vpoly
 6161:     """
 6162:     cdef int jj
+6163:     cdef int indin=0
  __pyx_v_indin = 0;
+6164:     cdef int indout=0
  __pyx_v_indout = 0;
 6165:     cdef double norm_dir2, norm_dir2_ori
 6166:     cdef double radius_z
 6167:     cdef double q, coeff, sqd, k
 6168:     cdef double v0, v1, val_a, val_b
 6169:     cdef double[2] res_a
 6170:     cdef double[2] res_b
 6171:     cdef double[3] circle_tangent
 6172:     cdef double rdotvec
+6173:     res_final[0] = 1000000000
  (__pyx_v_res_final[0]) = 1000000000.0;
+6174:     res_final[1] = 1000000000
  (__pyx_v_res_final[1]) = 1000000000.0;
 6175: 
 6176:     # == Compute all solutions =================================================
 6177:     # Set tolerance value for ray_vdir[2,ii]
 6178:     # eps_uz is the tolerated DZ across 20m (max Tokamak size)
+6179:     norm_dir2 = Csqrt(compute_dot_prod(ray_vdir, ray_vdir))
  __pyx_v_norm_dir2 = sqrt(__pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_ray_vdir, __pyx_v_ray_vdir));
+6180:     norm_dir2_ori = norm_dir2
  __pyx_v_norm_dir2_ori = __pyx_v_norm_dir2;
+6181:     for jj in range(3):
  for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
    __pyx_v_jj = __pyx_t_1;
+6182:         ray_vdir[jj] = ray_vdir[jj] / norm_dir2
    (__pyx_v_ray_vdir[__pyx_v_jj]) = ((__pyx_v_ray_vdir[__pyx_v_jj]) / __pyx_v_norm_dir2);
  }
+6183:     norm_dir2 = 1.
  __pyx_v_norm_dir2 = 1.;
+6184:     if ray_vdir[2] * ray_vdir[2] < crit2:
  __pyx_t_2 = ((((__pyx_v_ray_vdir[2]) * (__pyx_v_ray_vdir[2])) < __pyx_v_crit2) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
 6185:         # -- Case with horizontal semi-line ------------------------------------
+6186:         for jj in range(nvert-1):
    __pyx_t_3 = (__pyx_v_nvert - 1);
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
      __pyx_v_jj = __pyx_t_1;
+6187:             if (lpolyy[jj+1] - lpolyy[jj])**2 > eps_vz * eps_vz:
      __pyx_t_2 = ((pow(((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj])), 2.0) > (__pyx_v_eps_vz * __pyx_v_eps_vz)) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L8;
      }
 6188:                 # If segment AB is NOT horizontal, then we can compute distance
 6189:                 # between LOS and cone.
 6190:                 # First we compute the "circle" on the cone that lives on the
 6191:                 # same plane as the line
+6192:                 q = (ray_orig[2] - lpolyy[jj]) / (lpolyy[jj+1] - lpolyy[jj])
        __pyx_v_q = (((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj])) / ((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj])));
+6193:                 if q < 0. :
        __pyx_t_2 = ((__pyx_v_q < 0.) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L9;
        }
 6194:                     # Then we only need to compute distance to circle C_A
+6195:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[__pyx_v_jj]), (__pyx_v_lpolyy[__pyx_v_jj]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6196:                                         lpolyx[jj], lpolyy[jj],
 6197:                                         norm_dir2, res_a)
+6198:                 elif q > 1:
        __pyx_t_2 = ((__pyx_v_q > 1.0) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L9;
        }
 6199:                     # Then we only need to compute distance to circle C_B
+6200:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[(__pyx_v_jj + 1)]), (__pyx_v_lpolyy[(__pyx_v_jj + 1)]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6201:                                          lpolyx[jj+1], lpolyy[jj+1],
 6202:                                          norm_dir2, res_a)
 6203:                 else:
 6204:                     # The we need to compute the radius (the height is Z_D)
 6205:                     # of the circle in the same plane as the LOS and compute the
 6206:                     # distance between the LOS and circle.
+6207:                     radius_z = q * (lpolyx[jj+1] - lpolyx[jj]) + lpolyx[jj]
        /*else*/ {
          __pyx_v_radius_z = ((__pyx_v_q * ((__pyx_v_lpolyx[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyx[__pyx_v_jj]))) + (__pyx_v_lpolyx[__pyx_v_jj]));
+6208:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, __pyx_v_radius_z, (__pyx_v_ray_orig[2]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6209:                                          radius_z, ray_orig[2],
 6210:                                          norm_dir2, res_a)
+6211:                     if res_a[1] < _VSMALL:
          __pyx_t_2 = (((__pyx_v_res_a[1]) < __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
          if (__pyx_t_2) {
/* … */
          }
        }
        __pyx_L9:;
 6212:                         # The line is either tangent or intersects the frustum
 6213:                         # we need to make the difference
+6214:                         k = res_a[0]
            __pyx_v_k = (__pyx_v_res_a[0]);
 6215:                         # we compute the ray from circle center to P
+6216:                         circle_tangent[0] = -ray_orig[0] - k * ray_vdir[0]
            (__pyx_v_circle_tangent[0]) = ((-(__pyx_v_ray_orig[0])) - (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+6217:                         circle_tangent[1] = -ray_orig[1] - k * ray_vdir[1]
            (__pyx_v_circle_tangent[1]) = ((-(__pyx_v_ray_orig[1])) - (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+6218:                         circle_tangent[2] = 0. # the line is horizontal
            (__pyx_v_circle_tangent[2]) = 0.;
+6219:                         rdotvec = compute_dot_prod(circle_tangent, ray_vdir)
            __pyx_v_rdotvec = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_circle_tangent, __pyx_v_ray_vdir);
+6220:                         if Cabs(rdotvec) > _VSMALL:
            __pyx_t_2 = ((fabs(__pyx_v_rdotvec) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
            if (__pyx_t_2) {
/* … */
            }
 6221:                             # There is an intersection, distance = Cnan
+6222:                             res_final[1] = Cnan # distance
              (__pyx_v_res_final[1]) = NAN;
+6223:                             res_final[0] = Cnan # k
              (__pyx_v_res_final[0]) = NAN;
 6224:                             # no need to continue
+6225:                             return
              goto __pyx_L0;
+6226:                 if (res_final[1] > res_a[1]
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_a[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L13_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+6227:                     or (res_final[1] == res_a[1] and res_final[0] > res_a[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_a[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L13_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_a[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L13_bool_binop_done:;
+6228:                     res_final[0] = res_a[0] # k
          (__pyx_v_res_final[0]) = (__pyx_v_res_a[0]);
+6229:                     res_final[1] = res_a[1] # distance
          (__pyx_v_res_final[1]) = (__pyx_v_res_a[1]);
 6230:             else:
 6231:                 # -- case with horizontal cone (aka cone is a plane annulus) ---
 6232:                 # Then the shortest distance is the distance to the
 6233:                 # outline circles
 6234:                 # computing distance to cricle C_A of radius R_A and height Z_A
+6235:                 dist_los_circle_core(ray_vdir, ray_orig,
      /*else*/ {
/* … */
        __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[__pyx_v_jj]), (__pyx_v_lpolyy[__pyx_v_jj]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6236:                                      lpolyx[jj], lpolyy[jj],
 6237:                                      norm_dir2, res_a)
+6238:                 if res_a[1] < _VSMALL:
        __pyx_t_2 = (((__pyx_v_res_a[1]) < __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
        if (__pyx_t_2) {
/* … */
        }
 6239:                     # The line is either tangent or intersects the frustum
 6240:                     # we need to make the difference
+6241:                     k = res_a[0]
          __pyx_v_k = (__pyx_v_res_a[0]);
 6242:                     # we compute the ray from circle center to P
+6243:                     circle_tangent[0] = -ray_orig[0] - k * ray_vdir[0]
          (__pyx_v_circle_tangent[0]) = ((-(__pyx_v_ray_orig[0])) - (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+6244:                     circle_tangent[1] = -ray_orig[1] - k * ray_vdir[1]
          (__pyx_v_circle_tangent[1]) = ((-(__pyx_v_ray_orig[1])) - (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+6245:                     circle_tangent[2] = 0. # the ray is horizontal
          (__pyx_v_circle_tangent[2]) = 0.;
+6246:                     rdotvec = compute_dot_prod(circle_tangent, ray_vdir)
          __pyx_v_rdotvec = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_circle_tangent, __pyx_v_ray_vdir);
+6247:                     if Cabs(rdotvec) > _VSMALL:
          __pyx_t_2 = ((fabs(__pyx_v_rdotvec) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
          if (__pyx_t_2) {
/* … */
          }
 6248:                         # There is an intersection, distance = Cnan
+6249:                         res_final[1] = Cnan # distance
            (__pyx_v_res_final[1]) = NAN;
+6250:                         res_final[0] = Cnan # k
            (__pyx_v_res_final[0]) = NAN;
 6251:                         # no need to continue
+6252:                         return
            goto __pyx_L0;
+6253:                 dist_los_circle_core(ray_vdir, ray_orig,
        __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[(__pyx_v_jj + 1)]), (__pyx_v_lpolyy[(__pyx_v_jj + 1)]), __pyx_v_norm_dir2, __pyx_v_res_b);
 6254:                                      lpolyx[jj+1], lpolyy[jj+1],
 6255:                                      norm_dir2, res_b)
+6256:                 if res_b[1] < _VSMALL:
        __pyx_t_2 = (((__pyx_v_res_b[1]) < __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
        if (__pyx_t_2) {
/* … */
        }
 6257:                     # The line is either tangent or intersects the frustum
 6258:                     # we need to make the difference
+6259:                     k = res_b[0]
          __pyx_v_k = (__pyx_v_res_b[0]);
 6260:                     # we compute the ray from circle center to P
+6261:                     circle_tangent[0] = -ray_orig[0] - k * ray_vdir[0]
          (__pyx_v_circle_tangent[0]) = ((-(__pyx_v_ray_orig[0])) - (__pyx_v_k * (__pyx_v_ray_vdir[0])));
+6262:                     circle_tangent[1] = -ray_orig[1] - k * ray_vdir[1]
          (__pyx_v_circle_tangent[1]) = ((-(__pyx_v_ray_orig[1])) - (__pyx_v_k * (__pyx_v_ray_vdir[1])));
+6263:                     circle_tangent[2] = 0. # the ray is horizontal
          (__pyx_v_circle_tangent[2]) = 0.;
+6264:                     rdotvec = compute_dot_prod(circle_tangent, ray_vdir)
          __pyx_v_rdotvec = __pyx_f_4tofu_4geom_5_GG03_compute_dot_prod(__pyx_v_circle_tangent, __pyx_v_ray_vdir);
+6265:                     if Cabs(rdotvec) > _VSMALL:
          __pyx_t_2 = ((fabs(__pyx_v_rdotvec) > __pyx_v_4tofu_4geom_5_GG03__VSMALL) != 0);
          if (__pyx_t_2) {
/* … */
          }
 6266:                         # There is an intersection, distance = Cnan
+6267:                         res_final[1] = Cnan # distance
            (__pyx_v_res_final[1]) = NAN;
+6268:                         res_final[0] = Cnan # k
            (__pyx_v_res_final[0]) = NAN;
 6269:                         # no need to continue
+6270:                         return
            goto __pyx_L0;
 6271:                 # The result is the one associated to the shortest distance
+6272:                 if (res_final[1] > res_a[1] or
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_a[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L21_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+6273:                     (res_final[1] == res_a[1] and res_final[0] > res_a[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_a[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L21_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_a[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L21_bool_binop_done:;
+6274:                     res_final[0] = res_a[0] # k
          (__pyx_v_res_final[0]) = (__pyx_v_res_a[0]);
+6275:                     res_final[1] = res_a[1] # distance
          (__pyx_v_res_final[1]) = (__pyx_v_res_a[1]);
+6276:                 if (res_final[1] > res_b[1] or
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_b[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L25_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
      }
      __pyx_L8:;
    }
+6277:                     (res_final[1] == res_b[1] and res_final[0] > res_b[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_b[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L25_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_b[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L25_bool_binop_done:;
+6278:                     res_final[0] = res_b[0] # k
          (__pyx_v_res_final[0]) = (__pyx_v_res_b[0]);
+6279:                     res_final[1] = res_b[1] # distance
          (__pyx_v_res_final[1]) = (__pyx_v_res_b[1]);
 6280:     else:
 6281:         # == More general non-horizontal semi-line case ========================
+6282:         for jj in range(nvert-1):
  /*else*/ {
    __pyx_t_3 = (__pyx_v_nvert - 1);
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
      __pyx_v_jj = __pyx_t_1;
+6283:             v0 = lpolyx[jj+1]-lpolyx[jj]
      __pyx_v_v0 = ((__pyx_v_lpolyx[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyx[__pyx_v_jj]));
+6284:             v1 = lpolyy[jj+1]-lpolyy[jj]
      __pyx_v_v1 = ((__pyx_v_lpolyy[(__pyx_v_jj + 1)]) - (__pyx_v_lpolyy[__pyx_v_jj]));
+6285:             val_a = v0 * v0 - upar2 * v1 * invuz * v1 * invuz
      __pyx_v_val_a = ((__pyx_v_v0 * __pyx_v_v0) - ((((__pyx_v_upar2 * __pyx_v_v1) * __pyx_v_invuz) * __pyx_v_v1) * __pyx_v_invuz));
 6286:             val_b = lpolyx[jj] * v0 + v1 * (ray_orig[2] - lpolyy[jj]) * upar2 *\
+6287:                     invuz * invuz - upscaDp * v1 * invuz
      __pyx_v_val_b = ((((__pyx_v_lpolyx[__pyx_v_jj]) * __pyx_v_v0) + ((((__pyx_v_v1 * ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_upar2) * __pyx_v_invuz) * __pyx_v_invuz)) - ((__pyx_v_upscaDp * __pyx_v_v1) * __pyx_v_invuz));
 6288:             coeff = - upar2 * (ray_orig[2] - lpolyy[jj])**2 * invuz * invuz +\
 6289:                     2. * upscaDp * (ray_orig[2]-lpolyy[jj]) * invuz -\
+6290:                     dpar2 + lpolyx[jj] * lpolyx[jj]
      __pyx_v_coeff = (((((((-__pyx_v_upar2) * pow(((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj])), 2.0)) * __pyx_v_invuz) * __pyx_v_invuz) + (((2. * __pyx_v_upscaDp) * ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz)) - __pyx_v_dpar2) + ((__pyx_v_lpolyx[__pyx_v_jj]) * (__pyx_v_lpolyx[__pyx_v_jj])));
+6291:             if (val_a * val_a < eps_a * eps_a):
      __pyx_t_2 = (((__pyx_v_val_a * __pyx_v_val_a) < (__pyx_v_eps_a * __pyx_v_eps_a)) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L30;
      }
+6292:                 if (val_b * val_b < eps_b * eps_b):
        __pyx_t_2 = (((__pyx_v_val_b * __pyx_v_val_b) < (__pyx_v_eps_b * __pyx_v_eps_b)) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L31;
        }
 6293:                     # let's see if C is 0 or not
+6294:                     if coeff * coeff < eps_a * eps_a :
          __pyx_t_2 = (((__pyx_v_coeff * __pyx_v_coeff) < (__pyx_v_eps_a * __pyx_v_eps_a)) != 0);
          if (__pyx_t_2) {
/* … */
          }
 6295:                         # then LOS included in cone and then we can choose point
 6296:                         # such that q = 0,  k = (z_A - z_D) / uz
+6297:                         res_a[0] = (lpolyy[jj] - ray_orig[2]) * invuz
            (__pyx_v_res_a[0]) = (((__pyx_v_lpolyy[__pyx_v_jj]) - (__pyx_v_ray_orig[2])) * __pyx_v_invuz);
+6298:                         res_a[1] = 0 # distance = 0 since LOS in cone
            (__pyx_v_res_a[1]) = 0.0;
 6299:                 else: # (val_b * val_b > eps_b * eps_b):
+6300:                     q = -coeff / (2. * val_b)
        /*else*/ {
          __pyx_v_q = ((-__pyx_v_coeff) / (2. * __pyx_v_val_b));
+6301:                     if q < 0. :
          __pyx_t_2 = ((__pyx_v_q < 0.) != 0);
          if (__pyx_t_2) {
/* … */
            goto __pyx_L33;
          }
 6302:                         # Then we only need to compute distance to circle C_A
+6303:                         dist_los_circle_core(ray_vdir, ray_orig,
            __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[__pyx_v_jj]), (__pyx_v_lpolyy[__pyx_v_jj]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6304:                                             lpolyx[jj], lpolyy[jj],
 6305:                                             norm_dir2, res_a)
+6306:                     elif q > 1:
          __pyx_t_2 = ((__pyx_v_q > 1.0) != 0);
          if (__pyx_t_2) {
/* … */
            goto __pyx_L33;
          }
 6307:                         # Then we only need to compute distance to circle C_B
+6308:                         dist_los_circle_core(ray_vdir, ray_orig,
            __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[(__pyx_v_jj + 1)]), (__pyx_v_lpolyy[(__pyx_v_jj + 1)]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6309:                                             lpolyx[jj+1], lpolyy[jj+1],
 6310:                                              norm_dir2, res_a)
 6311:                     else :
+6312:                         k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
          /*else*/ {
            __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+6313:                         if k >= 0.:
            __pyx_t_2 = ((__pyx_v_k >= 0.) != 0);
            if (__pyx_t_2) {
/* … */
            }
 6314:                             # Then there is an intersection
+6315:                             res_final[0] = Cnan
              (__pyx_v_res_final[0]) = NAN;
+6316:                             res_final[1] = Cnan
              (__pyx_v_res_final[1]) = NAN;
+6317:                             return # no need to move forward
              goto __pyx_L0;
 6318:                         else:
 6319:                             # The closest point on the line is the LOS origin
+6320:                             res_a[0] = 0
            /*else*/ {
              (__pyx_v_res_a[0]) = 0.0;
+6321:                             res_a[1] = -k * Csqrt(norm_dir2)
              (__pyx_v_res_a[1]) = ((-__pyx_v_k) * sqrt(__pyx_v_norm_dir2));
            }
          }
          __pyx_L33:;
        }
        __pyx_L31:;
+6322:                 if (res_final[1] > res_a[1]
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_a[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L36_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+6323:                     or (res_final[1] == res_a[1] and res_final[0] > res_a[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_a[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L36_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_a[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L36_bool_binop_done:;
+6324:                     res_final[0] = res_a[0] # k
          (__pyx_v_res_final[0]) = (__pyx_v_res_a[0]);
+6325:                     res_final[1] = res_a[1] # distance
          (__pyx_v_res_final[1]) = (__pyx_v_res_a[1]);
+6326:             elif (val_b * val_b >= val_a * coeff):
      __pyx_t_2 = (((__pyx_v_val_b * __pyx_v_val_b) >= (__pyx_v_val_a * __pyx_v_coeff)) != 0);
      if (__pyx_t_2) {
/* … */
      }
      __pyx_L30:;
    }
  }
  __pyx_L5:;
+6327:                 sqd = Csqrt(val_b * val_b - val_a * coeff)
        __pyx_v_sqd = sqrt(((__pyx_v_val_b * __pyx_v_val_b) - (__pyx_v_val_a * __pyx_v_coeff)));
 6328:                 # First solution
+6329:                 q = (-val_b + sqd) / val_a
        __pyx_v_q = (((-__pyx_v_val_b) + __pyx_v_sqd) / __pyx_v_val_a);
+6330:                 if q < 0:
        __pyx_t_2 = ((__pyx_v_q < 0.0) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L39;
        }
 6331:                     # Then we only need to compute distance to circle C_A
+6332:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[__pyx_v_jj]), (__pyx_v_lpolyy[__pyx_v_jj]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6333:                                          lpolyx[jj], lpolyy[jj],
 6334:                                          norm_dir2, res_a)
+6335:                 elif q > 1:
        __pyx_t_2 = ((__pyx_v_q > 1.0) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L39;
        }
 6336:                     # Then we only need to compute distance to circle C_B
+6337:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[(__pyx_v_jj + 1)]), (__pyx_v_lpolyy[(__pyx_v_jj + 1)]), __pyx_v_norm_dir2, __pyx_v_res_a);
 6338:                                          lpolyx[jj+1], lpolyy[jj+1],
 6339:                                          norm_dir2, res_a)
 6340:                 else :
+6341:                     k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
        /*else*/ {
          __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+6342:                     if k >= 0.:
          __pyx_t_2 = ((__pyx_v_k >= 0.) != 0);
          if (__pyx_t_2) {
/* … */
          }
 6343:                         # There is an intersection
+6344:                         res_final[0] = Cnan
            (__pyx_v_res_final[0]) = NAN;
+6345:                         res_final[1] = Cnan
            (__pyx_v_res_final[1]) = NAN;
+6346:                         return # no need to continue
            goto __pyx_L0;
 6347:                     else:
 6348:                         # The closest point on the LOS is its origin
+6349:                         res_a[0] = 0
          /*else*/ {
            (__pyx_v_res_a[0]) = 0.0;
+6350:                         res_a[1] = -k * Csqrt(norm_dir2)
            (__pyx_v_res_a[1]) = ((-__pyx_v_k) * sqrt(__pyx_v_norm_dir2));
          }
        }
        __pyx_L39:;
+6351:                 if (res_final[1] > res_a[1]
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_a[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L42_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+6352:                     or (res_final[1] == res_a[1] and res_final[0] > res_a[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_a[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L42_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_a[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L42_bool_binop_done:;
+6353:                     res_final[0] = res_a[0] # k
          (__pyx_v_res_final[0]) = (__pyx_v_res_a[0]);
+6354:                     res_final[1] = res_a[1] # distance
          (__pyx_v_res_final[1]) = (__pyx_v_res_a[1]);
 6355:                 # Second solution
+6356:                 q = (-val_b - sqd) / val_a
        __pyx_v_q = (((-__pyx_v_val_b) - __pyx_v_sqd) / __pyx_v_val_a);
+6357:                 if q < 0:
        __pyx_t_2 = ((__pyx_v_q < 0.0) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L45;
        }
 6358:                     # Then we only need to compute distance to circle C_A
+6359:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[__pyx_v_jj]), (__pyx_v_lpolyy[__pyx_v_jj]), __pyx_v_norm_dir2, __pyx_v_res_b);
 6360:                                          lpolyx[jj], lpolyy[jj],
 6361:                                          norm_dir2, res_b)
+6362:                 elif q > 1:
        __pyx_t_2 = ((__pyx_v_q > 1.0) != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L45;
        }
 6363:                     # Then we only need to compute distance to circle C_B
+6364:                     dist_los_circle_core(ray_vdir, ray_orig,
          __pyx_f_4tofu_4geom_5_GG03_dist_los_circle_core(__pyx_v_ray_vdir, __pyx_v_ray_orig, (__pyx_v_lpolyx[(__pyx_v_jj + 1)]), (__pyx_v_lpolyy[(__pyx_v_jj + 1)]), __pyx_v_norm_dir2, __pyx_v_res_b);
 6365:                                          lpolyx[jj+1], lpolyy[jj+1],
 6366:                                          norm_dir2, res_b)
 6367:                 else:
+6368:                     k = (q * v1 - (ray_orig[2] - lpolyy[jj])) * invuz
        /*else*/ {
          __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((__pyx_v_ray_orig[2]) - (__pyx_v_lpolyy[__pyx_v_jj]))) * __pyx_v_invuz);
+6369:                     if k>=0.:
          __pyx_t_2 = ((__pyx_v_k >= 0.) != 0);
          if (__pyx_t_2) {
/* … */
          }
 6370:                         # there is an intersection
+6371:                         res_final[0] = Cnan
            (__pyx_v_res_final[0]) = NAN;
+6372:                         res_final[1] = Cnan
            (__pyx_v_res_final[1]) = NAN;
+6373:                         return # no need to continue
            goto __pyx_L0;
 6374:                     else:
 6375:                         # The closest point on the LOS is its origin
+6376:                         res_b[0] = 0
          /*else*/ {
            (__pyx_v_res_b[0]) = 0.0;
+6377:                         res_b[1] = -k * Csqrt(norm_dir2)
            (__pyx_v_res_b[1]) = ((-__pyx_v_k) * sqrt(__pyx_v_norm_dir2));
          }
        }
        __pyx_L45:;
+6378:                 if (res_final[1] > res_b[1]
        __pyx_t_5 = (((__pyx_v_res_final[1]) > (__pyx_v_res_b[1])) != 0);
        if (!__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L48_bool_binop_done;
        }
/* … */
        if (__pyx_t_2) {
/* … */
        }
+6379:                     or (res_final[1] == res_b[1] and res_final[0] > res_b[0])):
        __pyx_t_5 = (((__pyx_v_res_final[1]) == (__pyx_v_res_b[1])) != 0);
        if (__pyx_t_5) {
        } else {
          __pyx_t_2 = __pyx_t_5;
          goto __pyx_L48_bool_binop_done;
        }
        __pyx_t_5 = (((__pyx_v_res_final[0]) > (__pyx_v_res_b[0])) != 0);
        __pyx_t_2 = __pyx_t_5;
        __pyx_L48_bool_binop_done:;
+6380:                     res_final[0] = res_b[0]
          (__pyx_v_res_final[0]) = (__pyx_v_res_b[0]);
+6381:                     res_final[1] = res_b[1]
          (__pyx_v_res_final[1]) = (__pyx_v_res_b[1]);
+6382:     res_final[0] = res_final[0] / norm_dir2_ori
  (__pyx_v_res_final[0]) = ((__pyx_v_res_final[0]) / __pyx_v_norm_dir2_ori);
+6383:     return
  goto __pyx_L0;
 6384: 
 6385: 
 6386: # ==============================================================================
 6387: #
 6388: #                         ARE LOS AND EXT-POLY CLOSE
 6389: #
 6390: # ==============================================================================
 6391: 
+6392: def is_close_los_vpoly_vec(int nvpoly, int nlos,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_77is_close_los_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_76is_close_los_vpoly_vec[] = "\n    This function tests if the distance between num_los Rays (or LOS) and\n    several `IN` structures (polygons extruded around the axis (0,0,1),\n    eg. flux surfaces) is smaller than `epsilon`.\n    For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO\n\n    Params\n    ======\n        nvpoly : int\n           Number of flux surfaces\n        nlos : int\n           Number of LOS\n        ray_orig : (3, num_los) double array\n           LOS origin points coordinates\n        ray_vdir : (3, num_los) double array\n           LOS normalized direction vector\n        ves_poly : (num_pol, 2, num_vertex) double array\n           Coordinates of the vertices of the Polygon defining the 2D poloidal\n           cut of the different IN surfaces\n           WARNING : we suppose all poly are nested in each other,\n                     and the first one is the smallest one\n        epsilon : double\n           Value for testing if distance < epsilon\n        eps_<val> : double\n           Small value, acceptance of error\n    Returns\n    =======\n        are_close : (npoly * num_los) bool array\n            `are_close[i * num_poly + j]` indicates if distance between i-th LOS and\n            j-th poly are closer than epsilon. (True if distance<epsilon)\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `is_close_los_vpoly_vec_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_77is_close_los_vpoly_vec = {"is_close_los_vpoly_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_77is_close_los_vpoly_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_76is_close_los_vpoly_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_77is_close_los_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nvpoly;
  int __pyx_v_nlos;
  PyArrayObject *__pyx_v_ray_orig = 0;
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ves_poly = 0;
  double __pyx_v_epsilon;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  PyObject *__pyx_v_algo_type = 0;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_vpoly_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nvpoly,&__pyx_n_s_nlos,&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_epsilon,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_algo_type,&__pyx_n_s_num_threads,0};
    PyObject* values[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[11] = ((PyObject*)__pyx_n_s_Tor);
    values[12] = ((PyObject*)__pyx_n_s_simple);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nvpoly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, 1); __PYX_ERR(0, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, 2); __PYX_ERR(0, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, 3); __PYX_ERR(0, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, 4); __PYX_ERR(0, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_epsilon)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, 5); __PYX_ERR(0, 6392, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_algo_type);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[13] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_close_los_vpoly_vec") < 0)) __PYX_ERR(0, 6392, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nvpoly = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nvpoly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6392, __pyx_L3_error)
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6392, __pyx_L3_error)
    __pyx_v_ray_orig = ((PyArrayObject *)values[2]);
    __pyx_v_ray_vdir = ((PyArrayObject *)values[3]);
    __pyx_v_ves_poly = ((PyArrayObject *)values[4]);
    __pyx_v_epsilon = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_epsilon == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6396, __pyx_L3_error)
    if (values[6]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6397, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__103;
    }
    if (values[7]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6397, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__104;
    }
    if (values[8]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6398, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__105;
    }
    if (values[9]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6398, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__106;
    }
    if (values[10]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[10]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6399, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__107;
    }
    __pyx_v_ves_type = ((PyObject*)values[11]);
    __pyx_v_algo_type = ((PyObject*)values[12]);
    if (values[13]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[13]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6400, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_close_los_vpoly_vec", 0, 6, 14, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6392, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 6393, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 6394, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_poly), __pyx_ptype_5numpy_ndarray, 1, "ves_poly", 0))) __PYX_ERR(0, 6395, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 6399, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_algo_type), (&PyString_Type), 1, "algo_type", 1))) __PYX_ERR(0, 6400, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_76is_close_los_vpoly_vec(__pyx_self, __pyx_v_nvpoly, __pyx_v_nlos, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_epsilon, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_76is_close_los_vpoly_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nvpoly, int __pyx_v_nlos, PyArrayObject *__pyx_v_ray_orig, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ves_poly, double __pyx_v_epsilon, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, int __pyx_v_num_threads) {
  PyObject *__pyx_v_warn = NULL;
  arrayobject *__pyx_v_are_close = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ves_poly;
  __Pyx_Buffer __pyx_pybuffer_ves_poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_vpoly_vec", 0);
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ves_poly.pybuffer.buf = NULL;
  __pyx_pybuffer_ves_poly.refcount = 0;
  __pyx_pybuffernd_ves_poly.data = NULL;
  __pyx_pybuffernd_ves_poly.rcbuffer = &__pyx_pybuffer_ves_poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6392, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_orig.diminfo[1].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_orig.diminfo[1].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6392, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_vdir.diminfo[1].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_vdir.diminfo[1].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_ves_poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6392, __pyx_L1_error)
  }
  __pyx_pybuffernd_ves_poly.diminfo[0].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ves_poly.diminfo[0].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ves_poly.diminfo[1].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ves_poly.diminfo[1].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ves_poly.diminfo[2].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ves_poly.diminfo[2].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[2];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.is_close_los_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_are_close);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__234 = PyTuple_Pack(16, __pyx_n_s_nvpoly, __pyx_n_s_nlos, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_epsilon, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_algo_type, __pyx_n_s_num_threads, __pyx_n_s_warn, __pyx_n_s_are_close); if (unlikely(!__pyx_tuple__234)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__234);
  __Pyx_GIVEREF(__pyx_tuple__234);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_77is_close_los_vpoly_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_close_los_vpoly_vec, __pyx_t_2) < 0) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__235 = (PyObject*)__Pyx_PyCode_New(14, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__234, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_is_close_los_vpoly_vec, 6392, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__235)) __PYX_ERR(0, 6392, __pyx_L1_error)
 6393:                            np.ndarray[double,ndim=2,mode='c'] ray_orig,
 6394:                            np.ndarray[double,ndim=2,mode='c'] ray_vdir,
 6395:                            np.ndarray[double,ndim=3,mode='c'] ves_poly,
 6396:                            double epsilon,
+6397:                            double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__103 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__104 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6398:                            double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__105 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__106 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6399:                            double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__107 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 6400:                            str algo_type='simple', int num_threads=16):
 6401:     """
 6402:     This function tests if the distance between num_los Rays (or LOS) and
 6403:     several `IN` structures (polygons extruded around the axis (0,0,1),
 6404:     eg. flux surfaces) is smaller than `epsilon`.
 6405:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 6406: 
 6407:     Params
 6408:     ======
 6409:         nvpoly : int
 6410:            Number of flux surfaces
 6411:         nlos : int
 6412:            Number of LOS
 6413:         ray_orig : (3, num_los) double array
 6414:            LOS origin points coordinates
 6415:         ray_vdir : (3, num_los) double array
 6416:            LOS normalized direction vector
 6417:         ves_poly : (num_pol, 2, num_vertex) double array
 6418:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6419:            cut of the different IN surfaces
 6420:            WARNING : we suppose all poly are nested in each other,
 6421:                      and the first one is the smallest one
 6422:         epsilon : double
 6423:            Value for testing if distance < epsilon
 6424:         eps_<val> : double
 6425:            Small value, acceptance of error
 6426:     Returns
 6427:     =======
 6428:         are_close : (npoly * num_los) bool array
 6429:             `are_close[i * num_poly + j]` indicates if distance between i-th LOS and
 6430:             j-th poly are closer than epsilon. (True if distance<epsilon)
 6431:     ---
 6432:     This is the PYTHON function, use only if you need this computation from
 6433:     Python, if you need it from Cython, use `is_close_los_vpoly_vec_core`
 6434:     """
+6435:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6435, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6436:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__108, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__108 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(0, 6436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__108);
  __Pyx_GIVEREF(__pyx_tuple__108);
 6437:          Warning)
 6438: 
+6439:     cdef array are_close = clone(array('i'), nvpoly*nlos, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_nvpoly * __pyx_v_nlos), 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_are_close = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
+6440:     is_close_los_vpoly_vec_core(nvpoly, nlos,
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.num_threads = __pyx_v_num_threads;
  __pyx_f_4tofu_4geom_5_GG03_is_close_los_vpoly_vec_core(__pyx_v_nvpoly, __pyx_v_nlos, ((double *)__pyx_v_ray_orig->data), ((double *)__pyx_v_ray_vdir->data), __pyx_t_3, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_v_epsilon, __pyx_t_4, &__pyx_t_5); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 6441:                                 <double*>ray_orig.data,
 6442:                                 <double*>ray_vdir.data,
+6443:                                 ves_poly,
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(((PyObject *)__pyx_v_ves_poly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 6443, __pyx_L1_error)
 6444:                                 eps_uz, eps_a,
 6445:                                 eps_vz, eps_b,
 6446:                                 eps_plane,
 6447:                                 ves_type,
 6448:                                 algo_type,
 6449:                                 epsilon,
+6450:                                 are_close,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_are_close), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 6450, __pyx_L1_error)
 6451:                                 num_threads)
+6452:     return np.asarray(are_close, dtype=bool).reshape(nlos, nvpoly)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_v_are_close));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_are_close));
  PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_are_close));
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 6452, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_reshape); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_nlos); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_nvpoly); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6452, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6452, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 6452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_2);
    __pyx_t_8 = 0;
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6453: 
 6454: 
+6455: cdef void is_close_los_vpoly_vec_core(int num_poly, int nlos,
static void __pyx_f_4tofu_4geom_5_GG03_is_close_los_vpoly_vec_core(int __pyx_v_num_poly, CYTHON_UNUSED int __pyx_v_nlos, double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, CYTHON_UNUSED double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, double __pyx_v_epsilon, __Pyx_memviewslice __pyx_v_are_close, struct __pyx_opt_args_4tofu_4geom_5_GG03_is_close_los_vpoly_vec_core *__pyx_optional_args) {
  int __pyx_v_i;
  int __pyx_v_ind_los;
  int __pyx_v_ind_pol;
  int __pyx_v_npts_poly;
  double *__pyx_v_loc_res;
  double *__pyx_v_loc_dir;
  double *__pyx_v_loc_org;
  double __pyx_v_crit2;
  double __pyx_v_invuz;
  double __pyx_v_dpar2;
  double __pyx_v_upar2;
  double __pyx_v_upscaDp;
  double __pyx_v_crit2_base;
  PyObject *__pyx_v_warn = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_close_los_vpoly_vec_core", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 1);
  __Pyx_WriteUnraisable("tofu.geom._GG03.is_close_los_vpoly_vec_core", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_is_close_los_vpoly_vec_core {
  int __pyx_n;
  int num_threads;
};
 6456:                                       double* ray_orig,
 6457:                                       double* ray_vdir,
 6458:                                       double[:,:,::1] ves_poly,
 6459:                                       double eps_uz,
 6460:                                       double eps_a,
 6461:                                       double eps_vz,
 6462:                                       double eps_b,
 6463:                                       double eps_plane,
 6464:                                       str ves_type,
 6465:                                       str algo_type,
 6466:                                       double epsilon,
 6467:                                       int[::1] are_close,
 6468:                                       int num_threads=16):
 6469:     """
 6470:     This function computes the distance (and the associated k) between nlos
 6471:     Rays (or LOS) and several `IN` structures (polygons extruded around the axis
 6472:     (0,0,1), eg. flux surfaces).
 6473:     For more details on the algorithm please see PDF: <name_of_pdf>.pdf #TODO
 6474: 
 6475:     Params
 6476:     ======
 6477:         num_poly : int
 6478:            Number of flux surfaces
 6479:         nlos : int
 6480:            Number of LOS
 6481:         ray_orig : (3, nlos) double array
 6482:            LOS origin points coordinates
 6483:         ray_vdir : (3, nlos) double array
 6484:            LOS normalized direction vector
 6485:         ves_poly : (num_pol, 2, num_vertex) double array
 6486:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6487:            cut of the different IN surfaces.
 6488:            WARNING : we suppose all poly are nested in each other,
 6489:                      and the first one is the smallest one
 6490:         epsilon : double
 6491:            Value for testing if distance < epsilon
 6492:         eps_<val> : double
 6493:            Small value, acceptance of error
 6494:     Returns
 6495:     =======
 6496:         are_close : (npoly * num_los) bool array
 6497:             `are_close[i * num_poly + j]` indicates if distance between i-th LOS
 6498:             and j-th poly are closer than epsilon. (True if distance<epsilon)
 6499:     ---
 6500:     This is the CYTHON function, use only if you need this computation from
 6501:     Cython, if you need it from Python, use `comp_dist_los_vpoly_vec`
 6502:     """
 6503:     cdef int i, ind_los, ind_pol, ind_pol2
 6504:     cdef int npts_poly
 6505:     cdef double* loc_res
 6506:     cdef double* loc_dir
 6507:     cdef double* loc_org
 6508:     cdef double* lpolyx
 6509:     cdef double* lpolyy
 6510:     cdef double crit2, invuz,  dpar2, upar2, upscaDp
+6511:     cdef double crit2_base = eps_uz * eps_uz /400.
  __pyx_v_crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
 6512: 
+6513:     if not algo_type.lower() == "simple" or not ves_type.lower() == "tor":
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_algo_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simple, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6513, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = ((!__pyx_t_3) != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6513, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 6513, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+6514:         assert False, "The function is only implemented with the simple"\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
+6515:             + " algorithm and for toroidal vessels... Sorry!"
        __pyx_t_2 = PyNumber_Add(__pyx_kp_s_The_function_is_only_implemented, __pyx_kp_s_algorithm_and_for_toroidal_vess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6515, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 6514, __pyx_L1_error)
      }
    }
    #endif
+6516:     from warnings import warn
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_warn);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_2, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_warn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_warn = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6517:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__109, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__109 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(0, 6517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__109);
  __Pyx_GIVEREF(__pyx_tuple__109);
 6518:          Warning)
 6519: 
 6520:     # == Defining parallel part ================================================
+6521:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_loc_res)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
                __pyx_v_loc_res = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L8;
        }
        __pyx_L7_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L8:;
      }
  }
 6522:         # We use local arrays for each thread so...
+6523:         loc_dir = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_dir = ((double *)malloc((3 * (sizeof(double)))));
+6524:         loc_org = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_org = ((double *)malloc((3 * (sizeof(double)))));
+6525:         loc_res = <double*>malloc(2*sizeof(double))
                __pyx_v_loc_res = ((double *)malloc((2 * (sizeof(double)))));
 6526:         # == The parallelization over the LOS ==================================
+6527:         for ind_los in prange(nlos, schedule='dynamic'):
                __pyx_t_6 = __pyx_v_nlos;
                if (1 == 0) abort();
                {
                    __pyx_t_8 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_8 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dpar2) lastprivate(__pyx_v_i) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_pol) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_npts_poly) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_7);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_i = ((int)0xbad0bad0);
                                __pyx_v_ind_pol = ((int)0xbad0bad0);
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_npts_poly = ((int)0xbad0bad0);
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+6528:             for i in range(3):
                                for (__pyx_t_9 = 0; __pyx_t_9 < 3; __pyx_t_9+=1) {
                                  __pyx_v_i = __pyx_t_9;
+6529:                 loc_dir[i] = ray_vdir[ind_los * 3 + i]
                                  (__pyx_v_loc_dir[__pyx_v_i]) = (__pyx_v_ray_vdir[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
+6530:                 loc_org[i] = ray_orig[ind_los * 3 + i]
                                  (__pyx_v_loc_org[__pyx_v_i]) = (__pyx_v_ray_orig[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
                                }
 6531:             # -- Computing values that depend on the LOS/ray -------------------
+6532:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+6533:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+6534:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+6535:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+6536:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
 6537:             # -- Looping over each flux surface---------------------------------
+6538:             for ind_pol in range(num_poly):
                                __pyx_t_9 = __pyx_v_num_poly;
                                __pyx_t_10 = __pyx_t_9;
                                for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
                                  __pyx_v_ind_pol = __pyx_t_11;
+6539:                 npts_poly = ves_poly[ind_pol].shape[1]
                                  __pyx_t_12.data = __pyx_v_ves_poly.data;
                                  __pyx_t_12.memview = __pyx_v_ves_poly.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_12, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_ind_pol;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[0];
        if ((0)) __PYX_ERR(0, 6539, __pyx_L15_error)
        __pyx_t_12.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_12.shape[0] = __pyx_v_ves_poly.shape[1];
__pyx_t_12.strides[0] = __pyx_v_ves_poly.strides[1];
    __pyx_t_12.suboffsets[0] = -1;

__pyx_t_12.shape[1] = __pyx_v_ves_poly.shape[2];
__pyx_t_12.strides[1] = __pyx_v_ves_poly.strides[2];
    __pyx_t_12.suboffsets[1] = -1;

__pyx_v_npts_poly = (__pyx_t_12.shape[1]);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_12, 0);
                                  __pyx_t_12.memview = NULL;
                                  __pyx_t_12.data = NULL;
+6540:                 simple_dist_los_vpoly_core(loc_org, loc_dir,
                                  __pyx_f_4tofu_4geom_5_GG03_simple_dist_los_vpoly_core(__pyx_v_loc_org, __pyx_v_loc_dir, (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_13 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_14 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_15)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_16 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_17 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_18)) )))), __pyx_v_npts_poly, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_loc_res);
+6541:                                            &ves_poly[ind_pol][0][0],
                                  __pyx_t_13 = __pyx_v_ind_pol;
                                  __pyx_t_14 = 0;
                                  __pyx_t_15 = 0;
+6542:                                            &ves_poly[ind_pol][1][0],
                                  __pyx_t_16 = __pyx_v_ind_pol;
                                  __pyx_t_17 = 1;
                                  __pyx_t_18 = 0;
 6543:                                            npts_poly, upscaDp,
 6544:                                            upar2, dpar2,
 6545:                                            invuz, crit2,
 6546:                                            eps_uz, eps_vz,
 6547:                                            eps_a, eps_b,
 6548:                                            loc_res)
+6549:                 if loc_res[1] < epsilon:
                                  __pyx_t_1 = (((__pyx_v_loc_res[1]) < __pyx_v_epsilon) != 0);
                                  if (__pyx_t_1) {
/* … */
                                    goto __pyx_L21;
                                  }
+6550:                     are_close[ind_los * num_poly + ind_pol] = 1
                                    __pyx_t_19 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol);
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_are_close.data) + __pyx_t_19)) )) = 1;
+6551:                 elif loc_res[1] == loc_res[1]: # is nan
                                  __pyx_t_1 = (((__pyx_v_loc_res[1]) == (__pyx_v_loc_res[1])) != 0);
                                  if (__pyx_t_1) {
/* … */
                                  }
                                  __pyx_L21:;
                                  __pyx_L19_continue:;
                                }
                                goto __pyx_L23;
                                __pyx_L15_error:;
                                {
                                    #ifdef WITH_THREAD
                                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                    #endif
                                    #ifdef _OPENMP
                                    #pragma omp flush(__pyx_parallel_exc_type)
                                    #endif /* _OPENMP */
                                    if (!__pyx_parallel_exc_type) {
                                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                                    }
                                    #ifdef WITH_THREAD
                                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                    #endif
                                }
                                __pyx_parallel_why = 4;
                                goto __pyx_L22;
                                __pyx_L22:;
                                #ifdef _OPENMP
                                #pragma omp critical(__pyx_parallel_lastprivates1)
                                #endif /* _OPENMP */
                                {
                                    __pyx_parallel_temp0 = __pyx_v_crit2;
                                    __pyx_parallel_temp1 = __pyx_v_dpar2;
                                    __pyx_parallel_temp2 = __pyx_v_i;
                                    __pyx_parallel_temp3 = __pyx_v_ind_los;
                                    __pyx_parallel_temp4 = __pyx_v_ind_pol;
                                    __pyx_parallel_temp5 = __pyx_v_invuz;
                                    __pyx_parallel_temp6 = __pyx_v_npts_poly;
                                    __pyx_parallel_temp7 = __pyx_v_upar2;
                                    __pyx_parallel_temp8 = __pyx_v_upscaDp;
                                }
                                __pyx_L23:;
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_why)
                                #endif /* _OPENMP */
                            }
                        }
                    }
                    if (__pyx_parallel_exc_type) {
                      /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
                      __pyx_parallel_why = 4;
                    }
                    if (__pyx_parallel_why) {
                      __pyx_v_crit2 = __pyx_parallel_temp0;
                      __pyx_v_dpar2 = __pyx_parallel_temp1;
                      __pyx_v_i = __pyx_parallel_temp2;
                      __pyx_v_ind_los = __pyx_parallel_temp3;
                      __pyx_v_ind_pol = __pyx_parallel_temp4;
                      __pyx_v_invuz = __pyx_parallel_temp5;
                      __pyx_v_npts_poly = __pyx_parallel_temp6;
                      __pyx_v_upar2 = __pyx_parallel_temp7;
                      __pyx_v_upscaDp = __pyx_parallel_temp8;
                      switch (__pyx_parallel_why) {
                            case 4:
                        {
                            #ifdef WITH_THREAD
                            PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                            #endif
                            __Pyx_GIVEREF(__pyx_parallel_exc_type);
                            __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                            __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                            #ifdef WITH_THREAD
                            __Pyx_PyGILState_Release(__pyx_gilstate_save);
                            #endif
                        }
                        goto __pyx_L11_error;
                      }
                    }
                }
+6552:                     continue
                                    goto __pyx_L19_continue;
+6553:         free(loc_dir)
                free(__pyx_v_loc_dir);
+6554:         free(loc_org)
                free(__pyx_v_loc_org);
+6555:         free(loc_res)
                free(__pyx_v_loc_res);
                goto __pyx_L25;
                __pyx_L11_error:;
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #ifdef _OPENMP
                    #pragma omp flush(__pyx_parallel_exc_type)
                    #endif /* _OPENMP */
                    if (!__pyx_parallel_exc_type) {
                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                    }
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                __pyx_parallel_why = 4;
                goto __pyx_L25;
                __pyx_L25:;
                #ifdef _OPENMP
                Py_END_ALLOW_THREADS
                #else
{
#ifdef WITH_THREAD
                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                #endif
                #endif /* _OPENMP */
                /* Clean up any temporaries */
                __PYX_XDEC_MEMVIEW(&__pyx_t_12, 0);
                #ifdef WITH_THREAD
                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                #endif
                #ifndef _OPENMP
}
#endif /* _OPENMP */
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L7_error;
              }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+6556:     return
  goto __pyx_L0;
 6557: 
 6558: 
 6559: 
 6560: # ==============================================================================
 6561: #
 6562: #                         WHICH LOS/VPOLY IS CLOSER
 6563: #
 6564: # ==============================================================================
 6565: 
+6566: def which_los_closer_vpoly_vec(int nvpoly, int nlos,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_79which_los_closer_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_78which_los_closer_vpoly_vec[] = "\n    Params\n    ======\n        nvpoly : int\n           Number of flux surfaces\n        nlos : int\n           Number of LOS\n        ray_orig : (3, num_los) double array\n           LOS origin points coordinates\n        ray_vdir : (3, num_los) double array\n           LOS direction vector\n        ves_poly : (num_pol, 2, num_vertex) double array\n           Coordinates of the vertices of the Polygon defining the 2D poloidal\n           cut of the different IN surfaces\n           WARNING : we suppose all poly are nested in each other,\n                     and the first one is the smallest one\n        eps_<val> : double\n           Small value, acceptance of error\n    Returns\n    =======\n        ind_close_los : (npoly) int array\n            Of the form [ind_0, ind_1, ..., ind_(npoly-1)]\n            where ind_i is the coefficient for the i-th flux surface\n            such that the ind_i-th ray (LOS) is closest to the extruded polygon\n            among all other LOS without going over it.\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `which_los_closer_vpoly_vec_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_79which_los_closer_vpoly_vec = {"which_los_closer_vpoly_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_79which_los_closer_vpoly_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_78which_los_closer_vpoly_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_79which_los_closer_vpoly_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nvpoly;
  int __pyx_v_nlos;
  PyArrayObject *__pyx_v_ray_orig = 0;
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ves_poly = 0;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  PyObject *__pyx_v_algo_type = 0;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_los_closer_vpoly_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nvpoly,&__pyx_n_s_nlos,&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_algo_type,&__pyx_n_s_num_threads,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[10] = ((PyObject*)__pyx_n_s_Tor);
    values[11] = ((PyObject*)__pyx_n_s_simple);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nvpoly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_los_closer_vpoly_vec", 0, 5, 13, 1); __PYX_ERR(0, 6566, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_los_closer_vpoly_vec", 0, 5, 13, 2); __PYX_ERR(0, 6566, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_los_closer_vpoly_vec", 0, 5, 13, 3); __PYX_ERR(0, 6566, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_los_closer_vpoly_vec", 0, 5, 13, 4); __PYX_ERR(0, 6566, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_algo_type);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "which_los_closer_vpoly_vec") < 0)) __PYX_ERR(0, 6566, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nvpoly = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nvpoly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6566, __pyx_L3_error)
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6566, __pyx_L3_error)
    __pyx_v_ray_orig = ((PyArrayObject *)values[2]);
    __pyx_v_ray_vdir = ((PyArrayObject *)values[3]);
    __pyx_v_ves_poly = ((PyArrayObject *)values[4]);
    if (values[5]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6570, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__110;
    }
    if (values[6]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6570, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__111;
    }
    if (values[7]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6571, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__112;
    }
    if (values[8]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6571, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__113;
    }
    if (values[9]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6572, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__114;
    }
    __pyx_v_ves_type = ((PyObject*)values[10]);
    __pyx_v_algo_type = ((PyObject*)values[11]);
    if (values[12]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6573, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("which_los_closer_vpoly_vec", 0, 5, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6566, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.which_los_closer_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 6567, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 6568, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_poly), __pyx_ptype_5numpy_ndarray, 1, "ves_poly", 0))) __PYX_ERR(0, 6569, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 6572, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_algo_type), (&PyString_Type), 1, "algo_type", 1))) __PYX_ERR(0, 6573, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_78which_los_closer_vpoly_vec(__pyx_self, __pyx_v_nvpoly, __pyx_v_nlos, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_78which_los_closer_vpoly_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nvpoly, int __pyx_v_nlos, PyArrayObject *__pyx_v_ray_orig, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, int __pyx_v_num_threads) {
  PyObject *__pyx_v_warn = NULL;
  arrayobject *__pyx_v_ind_close_tab = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ves_poly;
  __Pyx_Buffer __pyx_pybuffer_ves_poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_los_closer_vpoly_vec", 0);
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ves_poly.pybuffer.buf = NULL;
  __pyx_pybuffer_ves_poly.refcount = 0;
  __pyx_pybuffernd_ves_poly.data = NULL;
  __pyx_pybuffernd_ves_poly.rcbuffer = &__pyx_pybuffer_ves_poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6566, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_orig.diminfo[1].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_orig.diminfo[1].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6566, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_vdir.diminfo[1].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_vdir.diminfo[1].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_ves_poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6566, __pyx_L1_error)
  }
  __pyx_pybuffernd_ves_poly.diminfo[0].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ves_poly.diminfo[0].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ves_poly.diminfo[1].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ves_poly.diminfo[1].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ves_poly.diminfo[2].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ves_poly.diminfo[2].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[2];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.which_los_closer_vpoly_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind_close_tab);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__236 = PyTuple_Pack(15, __pyx_n_s_nvpoly, __pyx_n_s_nlos, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_algo_type, __pyx_n_s_num_threads, __pyx_n_s_warn, __pyx_n_s_ind_close_tab); if (unlikely(!__pyx_tuple__236)) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__236);
  __Pyx_GIVEREF(__pyx_tuple__236);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_79which_los_closer_vpoly_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_which_los_closer_vpoly_vec, __pyx_t_2) < 0) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__237 = (PyObject*)__Pyx_PyCode_New(13, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__236, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_which_los_closer_vpoly_vec, 6566, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__237)) __PYX_ERR(0, 6566, __pyx_L1_error)
 6567:                                np.ndarray[double,ndim=2,mode='c'] ray_orig,
 6568:                                np.ndarray[double,ndim=2,mode='c'] ray_vdir,
 6569:                                np.ndarray[double,ndim=3,mode='c'] ves_poly,
+6570:                                double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__110 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__111 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6571:                                double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__112 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__113 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6572:                                double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__114 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 6573:                                str algo_type='simple', int num_threads=16):
 6574:     """
 6575:     Params
 6576:     ======
 6577:         nvpoly : int
 6578:            Number of flux surfaces
 6579:         nlos : int
 6580:            Number of LOS
 6581:         ray_orig : (3, num_los) double array
 6582:            LOS origin points coordinates
 6583:         ray_vdir : (3, num_los) double array
 6584:            LOS direction vector
 6585:         ves_poly : (num_pol, 2, num_vertex) double array
 6586:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6587:            cut of the different IN surfaces
 6588:            WARNING : we suppose all poly are nested in each other,
 6589:                      and the first one is the smallest one
 6590:         eps_<val> : double
 6591:            Small value, acceptance of error
 6592:     Returns
 6593:     =======
 6594:         ind_close_los : (npoly) int array
 6595:             Of the form [ind_0, ind_1, ..., ind_(npoly-1)]
 6596:             where ind_i is the coefficient for the i-th flux surface
 6597:             such that the ind_i-th ray (LOS) is closest to the extruded polygon
 6598:             among all other LOS without going over it.
 6599:     ---
 6600:     This is the PYTHON function, use only if you need this computation from
 6601:     Python, if you need it from Cython, use `which_los_closer_vpoly_vec_core`
 6602:     """
+6603:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6603, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6604:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__115, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__115 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(0, 6604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__115);
  __Pyx_GIVEREF(__pyx_tuple__115);
 6605:          Warning)
 6606: 
+6607:     cdef array ind_close_tab = clone(array('i'), nvpoly, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), __pyx_v_nvpoly, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6607, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ind_close_tab = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
+6608:     which_los_closer_vpoly_vec_core(nvpoly, nlos,
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.num_threads = __pyx_v_num_threads;
  __pyx_f_4tofu_4geom_5_GG03_which_los_closer_vpoly_vec_core(__pyx_v_nvpoly, __pyx_v_nlos, ((double *)__pyx_v_ray_orig->data), ((double *)__pyx_v_ray_vdir->data), __pyx_t_3, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_t_4, &__pyx_t_5); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 6609:                                     <double*>ray_orig.data,
 6610:                                     <double*>ray_vdir.data,
+6611:                                     ves_poly,
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(((PyObject *)__pyx_v_ves_poly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 6611, __pyx_L1_error)
 6612:                                     eps_uz, eps_a,
 6613:                                     eps_vz, eps_b,
 6614:                                     eps_plane,
 6615:                                     ves_type,
 6616:                                     algo_type,
+6617:                                     ind_close_tab,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_close_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 6617, __pyx_L1_error)
 6618:                                     num_threads)
+6619:     return np.asarray(ind_close_tab)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, ((PyObject *)__pyx_v_ind_close_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)__pyx_v_ind_close_tab));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6619, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6620: 
 6621: 
+6622: cdef void which_los_closer_vpoly_vec_core(int num_poly, int nlos,
static void __pyx_f_4tofu_4geom_5_GG03_which_los_closer_vpoly_vec_core(int __pyx_v_num_poly, int __pyx_v_nlos, double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, __Pyx_memviewslice __pyx_v_ind_close_tab, struct __pyx_opt_args_4tofu_4geom_5_GG03_which_los_closer_vpoly_vec_core *__pyx_optional_args) {
  int __pyx_v_num_threads = ((int)16);
  int __pyx_v_ind_los;
  int __pyx_v_ind_pol;
  int __pyx_v_indloc;
  double __pyx_v_loc_dist;
  CYTHON_UNUSED double __pyx_v_crit2_base;
  arrayobject *__pyx_v_kmin_tab = 0;
  arrayobject *__pyx_v_dist_tab = 0;
  PyObject *__pyx_v_warn = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_los_closer_vpoly_vec_core", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_num_threads = __pyx_optional_args->num_threads;
    }
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_WriteUnraisable("tofu.geom._GG03.which_los_closer_vpoly_vec_core", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_kmin_tab);
  __Pyx_XDECREF((PyObject *)__pyx_v_dist_tab);
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_which_los_closer_vpoly_vec_core {
  int __pyx_n;
  int num_threads;
};
 6623:                                           double* ray_orig,
 6624:                                           double* ray_vdir,
 6625:                                           double[:,:,::1] ves_poly,
 6626:                                           double eps_uz,
 6627:                                           double eps_a,
 6628:                                           double eps_vz,
 6629:                                           double eps_b,
 6630:                                           double eps_plane,
 6631:                                           str ves_type,
 6632:                                           str algo_type,
 6633:                                           int[::1] ind_close_tab,
 6634:                                           int num_threads=16):
 6635:     """
 6636:     Params
 6637:     ======
 6638:         num_poly : int
 6639:            Number of flux surfaces
 6640:         nlos : int
 6641:            Number of LOS
 6642:         ray_orig : (3, nlos) double array
 6643:            LOS origin points coordinates
 6644:         ray_vdir : (3, nlos) double array
 6645:            LOS normalized direction vector
 6646:         ves_poly : (num_pol, 2, num_vertex) double array
 6647:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6648:            cut of the different IN surfaces.
 6649:            WARNING : we suppose all poly are nested in each other,
 6650:                      and the first one is the smallest one
 6651:         eps_<val> : double
 6652:            Small value, acceptance of error
 6653:     Returns
 6654:     =======
 6655:         ind_close_tab : (npoly) int array
 6656:             Of the form [ind_0, ind_1, ..., ind_(npoly-1)]
 6657:             where ind_i is the coefficient for the i-th flux surface
 6658:             such that the ind_i-th ray (LOS) is closest to the extruded polygon
 6659:             among all other LOS without going over it.
 6660:     ---
 6661:     This is the CYTHON function, use only if you need this computation from
 6662:     Cython, if you need it from Python, use `comp_dist_los_vpoly_vec`
 6663:     """
 6664:     cdef int i, ind_los, ind_pol, ind_pol2, indloc
 6665:     cdef int npts_poly
 6666:     cdef double* loc_res
 6667:     cdef double* loc_dir
 6668:     cdef double* loc_org
 6669:     cdef double loc_dist
 6670:     cdef double* lpolyx
 6671:     cdef double* lpolyy
 6672:     cdef double crit2, invuz,  dpar2, upar2, upscaDp
+6673:     cdef double crit2_base = eps_uz * eps_uz /400.
  __pyx_v_crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
+6674:     cdef array kmin_tab = clone(array('d'), num_poly*nlos, True)
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_1), (__pyx_v_num_poly * __pyx_v_nlos), 1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_kmin_tab = ((arrayobject *)__pyx_t_2);
  __pyx_t_2 = 0;
+6675:     cdef array dist_tab = clone(array('d'), num_poly*nlos, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__70, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), (__pyx_v_num_poly * __pyx_v_nlos), 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_dist_tab = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
 6676: 
+6677:     if not algo_type.lower() == "simple" or not ves_type.lower() == "tor":
  __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_algo_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_simple, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 6677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = ((!__pyx_t_4) != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6677, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6677, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = ((!__pyx_t_5) != 0);
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {
/* … */
  }
+6678:         assert False, "The function is only implemented with the simple"\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
+6679:             + " algorithm and for toroidal vessels... Sorry!"
        __pyx_t_1 = PyNumber_Add(__pyx_kp_s_The_function_is_only_implemented, __pyx_kp_s_algorithm_and_for_toroidal_vess); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6679, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_1);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __PYX_ERR(0, 6678, __pyx_L1_error)
      }
    }
    #endif
+6680:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6680, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6681:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__116, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__116 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 6681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__116);
  __Pyx_GIVEREF(__pyx_tuple__116);
 6682:          Warning)
 6683: 
+6684:     for indloc in range(num_poly):
  __pyx_t_6 = __pyx_v_num_poly;
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_indloc = __pyx_t_8;
+6685:         ind_close_tab[indloc] = -1
    __pyx_t_9 = __pyx_v_indloc;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_close_tab.data) + __pyx_t_9)) )) = -1;
  }
+6686:     comp_dist_los_vpoly_vec_core(num_poly, nlos,
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.num_threads = __pyx_v_num_threads;
  __pyx_f_4tofu_4geom_5_GG03_comp_dist_los_vpoly_vec_core(__pyx_v_num_poly, __pyx_v_nlos, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_t_10, __pyx_t_11, &__pyx_t_12); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 6687:                                  ray_orig,
 6688:                                  ray_vdir,
 6689:                                  ves_poly,
 6690:                                  eps_uz, eps_a,
 6691:                                  eps_vz, eps_b,
 6692:                                  eps_plane,
 6693:                                  ves_type,
 6694:                                  algo_type,
+6695:                                  kmin_tab, dist_tab,
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_kmin_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 6695, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_dist_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 6695, __pyx_L1_error)
 6696:                                  num_threads)
 6697: 
 6698:     # We use local arrays for each thread so...
+6699:     for ind_pol in range(num_poly):
  __pyx_t_6 = __pyx_v_num_poly;
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_ind_pol = __pyx_t_8;
+6700:         loc_dist = 100000000.
    __pyx_v_loc_dist = 100000000.;
+6701:         for ind_los in range(nlos):
    __pyx_t_13 = __pyx_v_nlos;
    __pyx_t_14 = __pyx_t_13;
    for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
      __pyx_v_ind_los = __pyx_t_15;
+6702:             if (dist_tab[ind_los*num_poly + ind_pol] < loc_dist):
      __pyx_t_16 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol);
      __pyx_t_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_dist_tab), __pyx_t_16, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6702, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = PyFloat_FromDouble(__pyx_v_loc_dist); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6702, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_17 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_17); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6702, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_17); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6702, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
      if (__pyx_t_3) {
/* … */
      }
    }
  }
+6703:                 ind_close_tab[ind_pol] = ind_los
        __pyx_t_18 = __pyx_v_ind_pol;
        *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_close_tab.data) + __pyx_t_18)) )) = __pyx_v_ind_los;
+6704:                 loc_dist = dist_tab[ind_los*num_poly + ind_pol]
        __pyx_t_16 = ((__pyx_v_ind_los * __pyx_v_num_poly) + __pyx_v_ind_pol);
        __pyx_t_17 = __Pyx_GetItemInt(((PyObject *)__pyx_v_dist_tab), __pyx_t_16, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 6704, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_t_17); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6704, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __pyx_v_loc_dist = __pyx_t_19;
 6705: 
+6706:     return
  goto __pyx_L0;
 6707: 
 6708: 
 6709: 
 6710: 
+6711: def which_vpoly_closer_los_vec(int nvpoly, int nlos,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_81which_vpoly_closer_los_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_4tofu_4geom_5_GG03_80which_vpoly_closer_los_vec[] = "\n    Params\n    ======\n        nvpoly : int\n           Number of flux surfaces\n        nlos : int\n           Number of LOS\n        ray_orig : (3, num_los) double array\n           LOS origin points coordinates\n        ray_vdir : (3, num_los) double array\n           LOS direction vector\n        ves_poly : (num_pol, 2, num_vertex) double array\n           Coordinates of the vertices of the Polygon defining the 2D poloidal\n           cut of the different IN surfaces\n           WARNING : we suppose all poly are nested in each other,\n                     and the first one is the smallest one\n        eps_<val> : double\n           Small value, acceptance of error\n    Returns\n    =======\n        ind_close_los : (nlos) int array\n            Of the form [ind_0, ind_1, ..., ind_(nlos-1)]\n            where ind_i is the coefficient for the i-th LOS (ray)\n            such that the ind_i-th poly (flux surface) is closest to the LOS\n            among all other poly without going over it.\n    ---\n    This is the PYTHON function, use only if you need this computation from\n    Python, if you need it from Cython, use `which_vpoly_closer_los_vec_core`\n    ";
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_81which_vpoly_closer_los_vec = {"which_vpoly_closer_los_vec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_81which_vpoly_closer_los_vec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_4tofu_4geom_5_GG03_80which_vpoly_closer_los_vec};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_81which_vpoly_closer_los_vec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_nvpoly;
  int __pyx_v_nlos;
  PyArrayObject *__pyx_v_ray_orig = 0;
  PyArrayObject *__pyx_v_ray_vdir = 0;
  PyArrayObject *__pyx_v_ves_poly = 0;
  double __pyx_v_eps_uz;
  double __pyx_v_eps_a;
  double __pyx_v_eps_vz;
  double __pyx_v_eps_b;
  double __pyx_v_eps_plane;
  PyObject *__pyx_v_ves_type = 0;
  PyObject *__pyx_v_algo_type = 0;
  int __pyx_v_num_threads;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_vpoly_closer_los_vec (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nvpoly,&__pyx_n_s_nlos,&__pyx_n_s_ray_orig,&__pyx_n_s_ray_vdir,&__pyx_n_s_ves_poly,&__pyx_n_s_eps_uz,&__pyx_n_s_eps_a,&__pyx_n_s_eps_vz,&__pyx_n_s_eps_b,&__pyx_n_s_eps_plane,&__pyx_n_s_ves_type,&__pyx_n_s_algo_type,&__pyx_n_s_num_threads,0};
    PyObject* values[13] = {0,0,0,0,0,0,0,0,0,0,0,0,0};
    values[10] = ((PyObject*)__pyx_n_s_Tor);
    values[11] = ((PyObject*)__pyx_n_s_simple);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nvpoly)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nlos)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_vpoly_closer_los_vec", 0, 5, 13, 1); __PYX_ERR(0, 6711, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_orig)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_vpoly_closer_los_vec", 0, 5, 13, 2); __PYX_ERR(0, 6711, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ray_vdir)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_vpoly_closer_los_vec", 0, 5, 13, 3); __PYX_ERR(0, 6711, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_poly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("which_vpoly_closer_los_vec", 0, 5, 13, 4); __PYX_ERR(0, 6711, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_uz);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_a);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_vz);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_b);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_eps_plane);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_ves_type);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_algo_type);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_num_threads);
          if (value) { values[12] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "which_vpoly_closer_los_vec") < 0)) __PYX_ERR(0, 6711, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_nvpoly = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_nvpoly == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6711, __pyx_L3_error)
    __pyx_v_nlos = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_nlos == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6711, __pyx_L3_error)
    __pyx_v_ray_orig = ((PyArrayObject *)values[2]);
    __pyx_v_ray_vdir = ((PyArrayObject *)values[3]);
    __pyx_v_ves_poly = ((PyArrayObject *)values[4]);
    if (values[5]) {
      __pyx_v_eps_uz = __pyx_PyFloat_AsDouble(values[5]); if (unlikely((__pyx_v_eps_uz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6715, __pyx_L3_error)
    } else {
      __pyx_v_eps_uz = __pyx_k__117;
    }
    if (values[6]) {
      __pyx_v_eps_a = __pyx_PyFloat_AsDouble(values[6]); if (unlikely((__pyx_v_eps_a == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6715, __pyx_L3_error)
    } else {
      __pyx_v_eps_a = __pyx_k__118;
    }
    if (values[7]) {
      __pyx_v_eps_vz = __pyx_PyFloat_AsDouble(values[7]); if (unlikely((__pyx_v_eps_vz == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6716, __pyx_L3_error)
    } else {
      __pyx_v_eps_vz = __pyx_k__119;
    }
    if (values[8]) {
      __pyx_v_eps_b = __pyx_PyFloat_AsDouble(values[8]); if (unlikely((__pyx_v_eps_b == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6716, __pyx_L3_error)
    } else {
      __pyx_v_eps_b = __pyx_k__120;
    }
    if (values[9]) {
      __pyx_v_eps_plane = __pyx_PyFloat_AsDouble(values[9]); if (unlikely((__pyx_v_eps_plane == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6717, __pyx_L3_error)
    } else {
      __pyx_v_eps_plane = __pyx_k__121;
    }
    __pyx_v_ves_type = ((PyObject*)values[10]);
    __pyx_v_algo_type = ((PyObject*)values[11]);
    if (values[12]) {
      __pyx_v_num_threads = __Pyx_PyInt_As_int(values[12]); if (unlikely((__pyx_v_num_threads == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 6718, __pyx_L3_error)
    } else {
      __pyx_v_num_threads = ((int)16);
    }
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("which_vpoly_closer_los_vec", 0, 5, 13, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6711, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.which_vpoly_closer_los_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_orig), __pyx_ptype_5numpy_ndarray, 1, "ray_orig", 0))) __PYX_ERR(0, 6712, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ray_vdir), __pyx_ptype_5numpy_ndarray, 1, "ray_vdir", 0))) __PYX_ERR(0, 6713, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_poly), __pyx_ptype_5numpy_ndarray, 1, "ves_poly", 0))) __PYX_ERR(0, 6714, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ves_type), (&PyString_Type), 1, "ves_type", 1))) __PYX_ERR(0, 6717, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_algo_type), (&PyString_Type), 1, "algo_type", 1))) __PYX_ERR(0, 6718, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_80which_vpoly_closer_los_vec(__pyx_self, __pyx_v_nvpoly, __pyx_v_nlos, __pyx_v_ray_orig, __pyx_v_ray_vdir, __pyx_v_ves_poly, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_v_num_threads);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_80which_vpoly_closer_los_vec(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_nvpoly, int __pyx_v_nlos, PyArrayObject *__pyx_v_ray_orig, PyArrayObject *__pyx_v_ray_vdir, PyArrayObject *__pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, int __pyx_v_num_threads) {
  PyObject *__pyx_v_warn = NULL;
  arrayobject *__pyx_v_ind_close_tab = 0;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_orig;
  __Pyx_Buffer __pyx_pybuffer_ray_orig;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ray_vdir;
  __Pyx_Buffer __pyx_pybuffer_ray_vdir;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_ves_poly;
  __Pyx_Buffer __pyx_pybuffer_ves_poly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_vpoly_closer_los_vec", 0);
  __pyx_pybuffer_ray_orig.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_orig.refcount = 0;
  __pyx_pybuffernd_ray_orig.data = NULL;
  __pyx_pybuffernd_ray_orig.rcbuffer = &__pyx_pybuffer_ray_orig;
  __pyx_pybuffer_ray_vdir.pybuffer.buf = NULL;
  __pyx_pybuffer_ray_vdir.refcount = 0;
  __pyx_pybuffernd_ray_vdir.data = NULL;
  __pyx_pybuffernd_ray_vdir.rcbuffer = &__pyx_pybuffer_ray_vdir;
  __pyx_pybuffer_ves_poly.pybuffer.buf = NULL;
  __pyx_pybuffer_ves_poly.refcount = 0;
  __pyx_pybuffernd_ves_poly.data = NULL;
  __pyx_pybuffernd_ves_poly.rcbuffer = &__pyx_pybuffer_ves_poly;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_orig, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6711, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_orig.diminfo[0].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_orig.diminfo[0].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_orig.diminfo[1].strides = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_orig.diminfo[1].shape = __pyx_pybuffernd_ray_orig.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer, (PyObject*)__pyx_v_ray_vdir, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6711, __pyx_L1_error)
  }
  __pyx_pybuffernd_ray_vdir.diminfo[0].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ray_vdir.diminfo[0].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ray_vdir.diminfo[1].strides = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ray_vdir.diminfo[1].shape = __pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer, (PyObject*)__pyx_v_ves_poly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6711, __pyx_L1_error)
  }
  __pyx_pybuffernd_ves_poly.diminfo[0].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_ves_poly.diminfo[0].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_ves_poly.diminfo[1].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_ves_poly.diminfo[1].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_ves_poly.diminfo[2].strides = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_ves_poly.diminfo[2].shape = __pyx_pybuffernd_ves_poly.rcbuffer->pybuffer.shape[2];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_6);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.which_vpoly_closer_los_vec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_orig.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ray_vdir.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_ves_poly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_ind_close_tab);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__238 = PyTuple_Pack(15, __pyx_n_s_nvpoly, __pyx_n_s_nlos, __pyx_n_s_ray_orig, __pyx_n_s_ray_vdir, __pyx_n_s_ves_poly, __pyx_n_s_eps_uz, __pyx_n_s_eps_a, __pyx_n_s_eps_vz, __pyx_n_s_eps_b, __pyx_n_s_eps_plane, __pyx_n_s_ves_type, __pyx_n_s_algo_type, __pyx_n_s_num_threads, __pyx_n_s_warn, __pyx_n_s_ind_close_tab); if (unlikely(!__pyx_tuple__238)) __PYX_ERR(0, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__238);
  __Pyx_GIVEREF(__pyx_tuple__238);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_81which_vpoly_closer_los_vec, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_which_vpoly_closer_los_vec, __pyx_t_2) < 0) __PYX_ERR(0, 6711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__239 = (PyObject*)__Pyx_PyCode_New(13, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__238, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_which_vpoly_closer_los_vec, 6711, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__239)) __PYX_ERR(0, 6711, __pyx_L1_error)
 6712:                                np.ndarray[double,ndim=2,mode='c'] ray_orig,
 6713:                                np.ndarray[double,ndim=2,mode='c'] ray_vdir,
 6714:                                np.ndarray[double,ndim=3,mode='c'] ves_poly,
+6715:                                double eps_uz=_SMALL, double eps_a=_VSMALL,
  __pyx_k__117 = __pyx_v_4tofu_4geom_5_GG03__SMALL;
  __pyx_k__118 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6716:                                double eps_vz=_VSMALL, double eps_b=_VSMALL,
  __pyx_k__119 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
  __pyx_k__120 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
+6717:                                double eps_plane=_VSMALL, str ves_type='Tor',
  __pyx_k__121 = __pyx_v_4tofu_4geom_5_GG03__VSMALL;
 6718:                                str algo_type='simple', int num_threads=16):
 6719:     """
 6720:     Params
 6721:     ======
 6722:         nvpoly : int
 6723:            Number of flux surfaces
 6724:         nlos : int
 6725:            Number of LOS
 6726:         ray_orig : (3, num_los) double array
 6727:            LOS origin points coordinates
 6728:         ray_vdir : (3, num_los) double array
 6729:            LOS direction vector
 6730:         ves_poly : (num_pol, 2, num_vertex) double array
 6731:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6732:            cut of the different IN surfaces
 6733:            WARNING : we suppose all poly are nested in each other,
 6734:                      and the first one is the smallest one
 6735:         eps_<val> : double
 6736:            Small value, acceptance of error
 6737:     Returns
 6738:     =======
 6739:         ind_close_los : (nlos) int array
 6740:             Of the form [ind_0, ind_1, ..., ind_(nlos-1)]
 6741:             where ind_i is the coefficient for the i-th LOS (ray)
 6742:             such that the ind_i-th poly (flux surface) is closest to the LOS
 6743:             among all other poly without going over it.
 6744:     ---
 6745:     This is the PYTHON function, use only if you need this computation from
 6746:     Python, if you need it from Cython, use `which_vpoly_closer_los_vec_core`
 6747:     """
+6748:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6748, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6749:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__122, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
  __pyx_tuple__122 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 6749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__122);
  __Pyx_GIVEREF(__pyx_tuple__122);
 6750:          Warning)
 6751: 
+6752:     cdef array ind_close_tab = clone(array('i'), nlos, True)
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_7cpython_5array_array), __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = ((PyObject *)__pyx_f_7cpython_5array_clone(((arrayobject *)__pyx_t_2), __pyx_v_nlos, 1)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6752, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_ind_close_tab = ((arrayobject *)__pyx_t_1);
  __pyx_t_1 = 0;
+6753:     which_vpoly_closer_los_vec_core(nvpoly, nlos,
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.num_threads = __pyx_v_num_threads;
  __pyx_f_4tofu_4geom_5_GG03_which_vpoly_closer_los_vec_core(__pyx_v_nvpoly, __pyx_v_nlos, ((double *)__pyx_v_ray_orig->data), ((double *)__pyx_v_ray_vdir->data), __pyx_t_3, __pyx_v_eps_uz, __pyx_v_eps_a, __pyx_v_eps_vz, __pyx_v_eps_b, __pyx_v_eps_plane, __pyx_v_ves_type, __pyx_v_algo_type, __pyx_t_4, &__pyx_t_5); 
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __pyx_t_4.memview = NULL;
  __pyx_t_4.data = NULL;
 6754:                                     <double*>ray_orig.data,
 6755:                                     <double*>ray_vdir.data,
+6756:                                     ves_poly,
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_double(((PyObject *)__pyx_v_ves_poly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 6756, __pyx_L1_error)
 6757:                                     eps_uz, eps_a,
 6758:                                     eps_vz, eps_b,
 6759:                                     eps_plane,
 6760:                                     ves_type,
 6761:                                     algo_type,
+6762:                                     ind_close_tab,
  __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_dc_int(((PyObject *)__pyx_v_ind_close_tab), PyBUF_WRITABLE); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 6762, __pyx_L1_error)
 6763:                                     num_threads)
+6764:     return np.asarray(ind_close_tab)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_asarray); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, ((PyObject *)__pyx_v_ind_close_tab)) : __Pyx_PyObject_CallOneArg(__pyx_t_6, ((PyObject *)__pyx_v_ind_close_tab));
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6765: 
 6766: 
+6767: cdef void which_vpoly_closer_los_vec_core(int num_poly, int nlos,
static void __pyx_f_4tofu_4geom_5_GG03_which_vpoly_closer_los_vec_core(int __pyx_v_num_poly, int __pyx_v_nlos, double *__pyx_v_ray_orig, double *__pyx_v_ray_vdir, __Pyx_memviewslice __pyx_v_ves_poly, double __pyx_v_eps_uz, double __pyx_v_eps_a, double __pyx_v_eps_vz, double __pyx_v_eps_b, CYTHON_UNUSED double __pyx_v_eps_plane, PyObject *__pyx_v_ves_type, PyObject *__pyx_v_algo_type, __Pyx_memviewslice __pyx_v_ind_close_tab, struct __pyx_opt_args_4tofu_4geom_5_GG03_which_vpoly_closer_los_vec_core *__pyx_optional_args) {
  int __pyx_v_i;
  int __pyx_v_ind_los;
  int __pyx_v_ind_pol;
  int __pyx_v_indloc;
  int __pyx_v_npts_poly;
  double *__pyx_v_loc_res;
  double *__pyx_v_loc_dir;
  double *__pyx_v_loc_org;
  double __pyx_v_crit2;
  double __pyx_v_invuz;
  double __pyx_v_dpar2;
  double __pyx_v_upar2;
  double __pyx_v_upscaDp;
  double __pyx_v_crit2_base;
  PyObject *__pyx_v_warn = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("which_vpoly_closer_los_vec_core", 0);
  if (__pyx_optional_args) {
  }
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 1);
  __Pyx_WriteUnraisable("tofu.geom._GG03.which_vpoly_closer_los_vec_core", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_RefNannyFinishContext();
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_which_vpoly_closer_los_vec_core {
  int __pyx_n;
  int num_threads;
};
 6768:                                           double* ray_orig,
 6769:                                           double* ray_vdir,
 6770:                                           double[:,:,::1] ves_poly,
 6771:                                           double eps_uz,
 6772:                                           double eps_a,
 6773:                                           double eps_vz,
 6774:                                           double eps_b,
 6775:                                           double eps_plane,
 6776:                                           str ves_type,
 6777:                                           str algo_type,
 6778:                                           int[::1] ind_close_tab,
 6779:                                           int num_threads=16):
 6780:     """
 6781:     Params
 6782:     ======
 6783:         num_poly : int
 6784:            Number of flux surfaces
 6785:         nlos : int
 6786:            Number of LOS
 6787:         ray_orig : (3, nlos) double array
 6788:            LOS origin points coordinates
 6789:         ray_vdir : (3, nlos) double array
 6790:            LOS normalized direction vector
 6791:         ves_poly : (num_pol, 2, num_vertex) double array
 6792:            Coordinates of the vertices of the Polygon defining the 2D poloidal
 6793:            cut of the different IN surfaces.
 6794:            WARNING : we suppose all poly are nested in each other,
 6795:                      and the first one is the smallest one
 6796:         eps_<val> : double
 6797:            Small value, acceptance of error
 6798:     Returns
 6799:     =======
 6800:         ind_close_los : (nlos) int array
 6801:             Of the form [ind_0, ind_1, ..., ind_(nlos-1)]
 6802:             where ind_i is the coefficient for the i-th LOS (ray)
 6803:             such that the ind_i-th poly (flux surface) is closest to the LOS
 6804:             among all other poly without going over it.
 6805:     ---
 6806:     This is the CYTHON function, use only if you need this computation from
 6807:     Cython, if you need it from Python, use `comp_dist_los_vpoly_vec`
 6808:     """
 6809:     cdef int i, ind_los, ind_pol, ind_pol2, indloc
 6810:     cdef int npts_poly
 6811:     cdef double* loc_res
 6812:     cdef double* loc_dir
 6813:     cdef double* loc_org
 6814:     cdef double* lpolyx
 6815:     cdef double* lpolyy
 6816:     cdef double crit2, invuz,  dpar2, upar2, upscaDp
+6817:     cdef double crit2_base = eps_uz * eps_uz /400.
  __pyx_v_crit2_base = ((__pyx_v_eps_uz * __pyx_v_eps_uz) / 400.);
 6818: 
+6819:     if not algo_type.lower() == "simple" or not ves_type.lower() == "tor":
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_algo_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_simple, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6819, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = ((!__pyx_t_3) != 0);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyString_Type_lower, __pyx_v_ves_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6819, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_2, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 6819, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = ((!__pyx_t_4) != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+6820:         assert False, "The function is only implemented with the simple"\
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      if (unlikely(!0)) {
+6821:             + " algorithm and for toroidal vessels... Sorry!"
        __pyx_t_2 = PyNumber_Add(__pyx_kp_s_The_function_is_only_implemented, __pyx_kp_s_algorithm_and_for_toroidal_vess); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6821, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        PyErr_SetObject(PyExc_AssertionError, __pyx_t_2);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 6820, __pyx_L1_error)
      }
    }
    #endif
+6822:     from warnings import warn
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_warn);
  __pyx_t_5 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_2, -1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_5, __pyx_n_s_warn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_warn = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6823:     warn("This function supposes that the polys are nested from inner to outer",
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__123, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6823, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_tuple__123 = PyTuple_Pack(2, __pyx_kp_s_This_function_supposes_that_the, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(0, 6823, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__123);
  __Pyx_GIVEREF(__pyx_tuple__123);
 6824:          Warning)
 6825: 
 6826:     # initialization ...............................................
+6827:     for indloc in range(nlos):
  __pyx_t_6 = __pyx_v_nlos;
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_indloc = __pyx_t_8;
+6828:         ind_close_tab[indloc] = num_poly-1
    __pyx_t_9 = __pyx_v_indloc;
    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_close_tab.data) + __pyx_t_9)) )) = (__pyx_v_num_poly - 1);
  }
 6829: 
 6830:     # == Defining parallel part ================================================
+6831:     with nogil, parallel():
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {
        {
            #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
                #undef likely
                #undef unlikely
                #define likely(x)   (x)
                #define unlikely(x) (x)
            #endif
            #ifdef _OPENMP
            #pragma omp parallel private(__pyx_v_loc_dir, __pyx_v_loc_org, __pyx_v_loc_res)
            #endif /* _OPENMP */
            {
                /* Initialize private variables to invalid values */
                __pyx_v_loc_dir = ((double *)1);
                __pyx_v_loc_org = ((double *)1);
                __pyx_v_loc_res = ((double *)1);
/* … */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L10;
        }
        __pyx_L9_error: {
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L1_error;
        }
        __pyx_L10:;
      }
  }
 6832:         # We use local arrays for each thread so...
+6833:         loc_dir = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_dir = ((double *)malloc((3 * (sizeof(double)))));
+6834:         loc_org = <double*>malloc(3*sizeof(double))
                __pyx_v_loc_org = ((double *)malloc((3 * (sizeof(double)))));
+6835:         loc_res = <double*>malloc(2*sizeof(double))
                __pyx_v_loc_res = ((double *)malloc((2 * (sizeof(double)))));
 6836:         # == The parallelization over the LOS ==================================
+6837:         for ind_los in prange(nlos, schedule='dynamic'):
                __pyx_t_6 = __pyx_v_nlos;
                if (1 == 0) abort();
                {
                    __pyx_t_8 = (__pyx_t_6 - 0 + 1 - 1/abs(1)) / 1;
                    if (__pyx_t_8 > 0)
                    {
                        #ifdef _OPENMP
                        #pragma omp for lastprivate(__pyx_v_crit2) lastprivate(__pyx_v_dpar2) lastprivate(__pyx_v_i) firstprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_los) lastprivate(__pyx_v_ind_pol) lastprivate(__pyx_v_invuz) lastprivate(__pyx_v_npts_poly) lastprivate(__pyx_v_upar2) lastprivate(__pyx_v_upscaDp) schedule(dynamic)
                        #endif /* _OPENMP */
                        for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_8; __pyx_t_7++){
                            {
                                __pyx_v_ind_los = (int)(0 + 1 * __pyx_t_7);
                                /* Initialize private variables to invalid values */
                                __pyx_v_crit2 = ((double)__PYX_NAN());
                                __pyx_v_dpar2 = ((double)__PYX_NAN());
                                __pyx_v_i = ((int)0xbad0bad0);
                                __pyx_v_ind_pol = ((int)0xbad0bad0);
                                __pyx_v_invuz = ((double)__PYX_NAN());
                                __pyx_v_npts_poly = ((int)0xbad0bad0);
                                __pyx_v_upar2 = ((double)__PYX_NAN());
                                __pyx_v_upscaDp = ((double)__PYX_NAN());
+6838:             for i in range(3):
                                for (__pyx_t_10 = 0; __pyx_t_10 < 3; __pyx_t_10+=1) {
                                  __pyx_v_i = __pyx_t_10;
+6839:                 loc_dir[i] = ray_vdir[ind_los * 3 + i]
                                  (__pyx_v_loc_dir[__pyx_v_i]) = (__pyx_v_ray_vdir[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
+6840:                 loc_org[i] = ray_orig[ind_los * 3 + i]
                                  (__pyx_v_loc_org[__pyx_v_i]) = (__pyx_v_ray_orig[((__pyx_v_ind_los * 3) + __pyx_v_i)]);
                                }
 6841:             # -- Computing values that depend on the LOS/ray -------------------
+6842:             upscaDp = loc_dir[0]*loc_org[0] + loc_dir[1]*loc_org[1]
                                __pyx_v_upscaDp = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_org[1])));
+6843:             upar2   = loc_dir[0]*loc_dir[0] + loc_dir[1]*loc_dir[1]
                                __pyx_v_upar2 = (((__pyx_v_loc_dir[0]) * (__pyx_v_loc_dir[0])) + ((__pyx_v_loc_dir[1]) * (__pyx_v_loc_dir[1])));
+6844:             dpar2   = loc_org[0]*loc_org[0] + loc_org[1]*loc_org[1]
                                __pyx_v_dpar2 = (((__pyx_v_loc_org[0]) * (__pyx_v_loc_org[0])) + ((__pyx_v_loc_org[1]) * (__pyx_v_loc_org[1])));
+6845:             invuz = 1./loc_dir[2]
                                __pyx_v_invuz = (1. / (__pyx_v_loc_dir[2]));
+6846:             crit2 = upar2*crit2_base
                                __pyx_v_crit2 = (__pyx_v_upar2 * __pyx_v_crit2_base);
 6847:             # -- Looping over each flux surface---------------------------------
+6848:             for ind_pol in range(num_poly):
                                __pyx_t_10 = __pyx_v_num_poly;
                                __pyx_t_11 = __pyx_t_10;
                                for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
                                  __pyx_v_ind_pol = __pyx_t_12;
+6849:                 npts_poly = ves_poly[ind_pol].shape[1]
                                  __pyx_t_13.data = __pyx_v_ves_poly.data;
                                  __pyx_t_13.memview = __pyx_v_ves_poly.memview;
                                  __PYX_INC_MEMVIEW(&__pyx_t_13, 0);
                                  {
    Py_ssize_t __pyx_tmp_idx = __pyx_v_ind_pol;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_ves_poly.strides[0];
        if ((0)) __PYX_ERR(0, 6849, __pyx_L17_error)
        __pyx_t_13.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_13.shape[0] = __pyx_v_ves_poly.shape[1];
__pyx_t_13.strides[0] = __pyx_v_ves_poly.strides[1];
    __pyx_t_13.suboffsets[0] = -1;

__pyx_t_13.shape[1] = __pyx_v_ves_poly.shape[2];
__pyx_t_13.strides[1] = __pyx_v_ves_poly.strides[2];
    __pyx_t_13.suboffsets[1] = -1;

__pyx_v_npts_poly = (__pyx_t_13.shape[1]);
                                  __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                                  __pyx_t_13.memview = NULL;
                                  __pyx_t_13.data = NULL;
+6850:                 simple_dist_los_vpoly_core(loc_org, loc_dir,
                                  __pyx_f_4tofu_4geom_5_GG03_simple_dist_los_vpoly_core(__pyx_v_loc_org, __pyx_v_loc_dir, (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_14 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_15 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_16)) )))), (&(*((double *) ( /* dim=2 */ ((char *) (((double *) ( /* dim=1 */ (( /* dim=0 */ (__pyx_v_ves_poly.data + __pyx_t_17 * __pyx_v_ves_poly.strides[0]) ) + __pyx_t_18 * __pyx_v_ves_poly.strides[1]) )) + __pyx_t_19)) )))), __pyx_v_npts_poly, __pyx_v_upscaDp, __pyx_v_upar2, __pyx_v_dpar2, __pyx_v_invuz, __pyx_v_crit2, __pyx_v_eps_uz, __pyx_v_eps_vz, __pyx_v_eps_a, __pyx_v_eps_b, __pyx_v_loc_res);
+6851:                                            &ves_poly[ind_pol][0][0],
                                  __pyx_t_14 = __pyx_v_ind_pol;
                                  __pyx_t_15 = 0;
                                  __pyx_t_16 = 0;
+6852:                                            &ves_poly[ind_pol][1][0],
                                  __pyx_t_17 = __pyx_v_ind_pol;
                                  __pyx_t_18 = 1;
                                  __pyx_t_19 = 0;
 6853:                                            npts_poly, upscaDp,
 6854:                                            upar2, dpar2,
 6855:                                            invuz, crit2,
 6856:                                            eps_uz, eps_vz,
 6857:                                            eps_a, eps_b,
 6858:                                            loc_res)
 6859:                 # filling the array when nan found .............................
+6860:                 if not loc_res[1] == loc_res[1]:
                                  __pyx_t_1 = ((!(((__pyx_v_loc_res[1]) == (__pyx_v_loc_res[1])) != 0)) != 0);
                                  if (__pyx_t_1) {
/* … */
                                  }
                                  __pyx_L21_continue:;
                                }
                                goto __pyx_L25;
                                __pyx_L17_error:;
                                {
                                    #ifdef WITH_THREAD
                                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                                    #endif
                                    #ifdef _OPENMP
                                    #pragma omp flush(__pyx_parallel_exc_type)
                                    #endif /* _OPENMP */
                                    if (!__pyx_parallel_exc_type) {
                                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                                    }
                                    #ifdef WITH_THREAD
                                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                                    #endif
                                }
                                __pyx_parallel_why = 4;
                                goto __pyx_L24;
                                __pyx_L24:;
                                #ifdef _OPENMP
                                #pragma omp critical(__pyx_parallel_lastprivates2)
                                #endif /* _OPENMP */
                                {
                                    __pyx_parallel_temp0 = __pyx_v_crit2;
                                    __pyx_parallel_temp1 = __pyx_v_dpar2;
                                    __pyx_parallel_temp2 = __pyx_v_i;
                                    __pyx_parallel_temp3 = __pyx_v_ind_los;
                                    __pyx_parallel_temp4 = __pyx_v_ind_pol;
                                    __pyx_parallel_temp5 = __pyx_v_invuz;
                                    __pyx_parallel_temp6 = __pyx_v_npts_poly;
                                    __pyx_parallel_temp7 = __pyx_v_upar2;
                                    __pyx_parallel_temp8 = __pyx_v_upscaDp;
                                }
                                __pyx_L25:;
                                #ifdef _OPENMP
                                #pragma omp flush(__pyx_parallel_why)
                                #endif /* _OPENMP */
                            }
                        }
                    }
                    if (__pyx_parallel_exc_type) {
                      /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
                      __pyx_parallel_why = 4;
                    }
                    if (__pyx_parallel_why) {
                      __pyx_v_crit2 = __pyx_parallel_temp0;
                      __pyx_v_dpar2 = __pyx_parallel_temp1;
                      __pyx_v_i = __pyx_parallel_temp2;
                      __pyx_v_ind_los = __pyx_parallel_temp3;
                      __pyx_v_ind_pol = __pyx_parallel_temp4;
                      __pyx_v_invuz = __pyx_parallel_temp5;
                      __pyx_v_npts_poly = __pyx_parallel_temp6;
                      __pyx_v_upar2 = __pyx_parallel_temp7;
                      __pyx_v_upscaDp = __pyx_parallel_temp8;
                      switch (__pyx_parallel_why) {
                            case 4:
                        {
                            #ifdef WITH_THREAD
                            PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                            #endif
                            __Pyx_GIVEREF(__pyx_parallel_exc_type);
                            __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                            __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                            #ifdef WITH_THREAD
                            __Pyx_PyGILState_Release(__pyx_gilstate_save);
                            #endif
                        }
                        goto __pyx_L13_error;
                      }
                    }
                }
 6861:                     #the closer poly is the one just before
+6862:                     ind_close_tab[ind_los] = ind_pol-1
                                    __pyx_t_20 = __pyx_v_ind_los;
                                    *((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_ind_close_tab.data) + __pyx_t_20)) )) = (__pyx_v_ind_pol - 1);
+6863:                     continue
                                    goto __pyx_L21_continue;
+6864:         free(loc_dir)
                free(__pyx_v_loc_dir);
+6865:         free(loc_org)
                free(__pyx_v_loc_org);
+6866:         free(loc_res)
                free(__pyx_v_loc_res);
                goto __pyx_L27;
                __pyx_L13_error:;
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    #ifdef _OPENMP
                    #pragma omp flush(__pyx_parallel_exc_type)
                    #endif /* _OPENMP */
                    if (!__pyx_parallel_exc_type) {
                      __Pyx_ErrFetchWithState(&__pyx_parallel_exc_type, &__pyx_parallel_exc_value, &__pyx_parallel_exc_tb);
                      __pyx_parallel_filename = __pyx_filename; __pyx_parallel_lineno = __pyx_lineno; __pyx_parallel_clineno = __pyx_clineno;
                      __Pyx_GOTREF(__pyx_parallel_exc_type);
                    }
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                __pyx_parallel_why = 4;
                goto __pyx_L27;
                __pyx_L27:;
                #ifdef _OPENMP
                Py_END_ALLOW_THREADS
                #else
{
#ifdef WITH_THREAD
                PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                #endif
                #endif /* _OPENMP */
                /* Clean up any temporaries */
                __PYX_XDEC_MEMVIEW(&__pyx_t_13, 0);
                #ifdef WITH_THREAD
                __Pyx_PyGILState_Release(__pyx_gilstate_save);
                #endif
                #ifndef _OPENMP
}
#endif /* _OPENMP */
            }
            if (__pyx_parallel_exc_type) {
              /* This may have been overridden by a continue, break or return in another thread. Prefer the error. */
              __pyx_parallel_why = 4;
            }
            if (__pyx_parallel_why) {
              switch (__pyx_parallel_why) {
                    case 4:
                {
                    #ifdef WITH_THREAD
                    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
                    #endif
                    __Pyx_GIVEREF(__pyx_parallel_exc_type);
                    __Pyx_ErrRestoreWithState(__pyx_parallel_exc_type, __pyx_parallel_exc_value, __pyx_parallel_exc_tb);
                    __pyx_filename = __pyx_parallel_filename; __pyx_lineno = __pyx_parallel_lineno; __pyx_clineno = __pyx_parallel_clineno;
                    #ifdef WITH_THREAD
                    __Pyx_PyGILState_Release(__pyx_gilstate_save);
                    #endif
                }
                goto __pyx_L9_error;
              }
            }
        }
        #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
            #undef likely
            #undef unlikely
            #define likely(x)   __builtin_expect(!!(x), 1)
            #define unlikely(x) __builtin_expect(!!(x), 0)
        #endif
      }
+6867:     return
  goto __pyx_L0;
 6868: 
 6869: 
 6870: 
 6871: """
 6872: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6873: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6874: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6875: +++++++++++++++++++++++++++ OLD FUNCTIONS CEMETRY ++++++++++++++++++++++++++++++
 6876: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6877: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6878: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 6879: """
 6880: 
 6881: 
 6882: # deprecated version !!!!!!!!!!!!! TO ERASE !!!!!!!!!!!!!!!!!!!!!!!!!!!!
+6883: def SLOW_LOS_Calc_PInOut_VesStruct(Ds, dus,
/* Python wrapper */
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_83SLOW_LOS_Calc_PInOut_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_4tofu_4geom_5_GG03_83SLOW_LOS_Calc_PInOut_VesStruct = {"SLOW_LOS_Calc_PInOut_VesStruct", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_4tofu_4geom_5_GG03_83SLOW_LOS_Calc_PInOut_VesStruct, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_4tofu_4geom_5_GG03_83SLOW_LOS_Calc_PInOut_VesStruct(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_Ds = 0;
  PyObject *__pyx_v_dus = 0;
  PyArrayObject *__pyx_v_VPoly = 0;
  PyArrayObject *__pyx_v_VIn = 0;
  PyObject *__pyx_v_Lim = 0;
  PyObject *__pyx_v_nLim = 0;
  PyObject *__pyx_v_LSPoly = 0;
  PyObject *__pyx_v_LSLim = 0;
  PyObject *__pyx_v_lSnLim = 0;
  PyObject *__pyx_v_LSVIn = 0;
  PyObject *__pyx_v_RMin = 0;
  PyObject *__pyx_v_Forbid = 0;
  PyObject *__pyx_v_EpsUz = 0;
  PyObject *__pyx_v_EpsVz = 0;
  PyObject *__pyx_v_EpsA = 0;
  PyObject *__pyx_v_EpsB = 0;
  PyObject *__pyx_v_EpsPlane = 0;
  PyObject *__pyx_v_VType = 0;
  PyObject *__pyx_v_Test = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SLOW_LOS_Calc_PInOut_VesStruct (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_Ds,&__pyx_n_s_dus,&__pyx_n_s_VPoly,&__pyx_n_s_VIn,&__pyx_n_s_Lim,&__pyx_n_s_nLim,&__pyx_n_s_LSPoly,&__pyx_n_s_LSLim,&__pyx_n_s_lSnLim,&__pyx_n_s_LSVIn,&__pyx_n_s_RMin,&__pyx_n_s_Forbid,&__pyx_n_s_EpsUz,&__pyx_n_s_EpsVz,&__pyx_n_s_EpsA,&__pyx_n_s_EpsB,&__pyx_n_s_EpsPlane,&__pyx_n_s_VType,&__pyx_n_s_Test,0};
    PyObject* values[19] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_4tofu_4geom_5_GG03_82SLOW_LOS_Calc_PInOut_VesStruct(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_Ds, PyObject *__pyx_v_dus, PyArrayObject *__pyx_v_VPoly, PyArrayObject *__pyx_v_VIn, PyObject *__pyx_v_Lim, PyObject *__pyx_v_nLim, PyObject *__pyx_v_LSPoly, PyObject *__pyx_v_LSLim, PyObject *__pyx_v_lSnLim, PyObject *__pyx_v_LSVIn, PyObject *__pyx_v_RMin, PyObject *__pyx_v_Forbid, PyObject *__pyx_v_EpsUz, PyObject *__pyx_v_EpsVz, PyObject *__pyx_v_EpsA, PyObject *__pyx_v_EpsB, PyObject *__pyx_v_EpsPlane, PyObject *__pyx_v_VType, PyObject *__pyx_v_Test) {
  PyObject *__pyx_v_warn = NULL;
  PyObject *__pyx_v_C1 = NULL;
  PyObject *__pyx_v_C2 = NULL;
  int __pyx_v_ii;
  int __pyx_v_jj;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_NL = NULL;
  PyObject *__pyx_v_IOut = NULL;
  PyObject *__pyx_v_PIn = NULL;
  PyObject *__pyx_v_POut = NULL;
  PyObject *__pyx_v_VperpIn = NULL;
  PyObject *__pyx_v_VperpOut = NULL;
  PyObject *__pyx_v_IIn = NULL;
  PyObject *__pyx_v_kPOut = NULL;
  PyObject *__pyx_v_kPIn = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_Ind = NULL;
  PyObject *__pyx_v_lslim = NULL;
  PyObject *__pyx_v_pIn = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_pOut = NULL;
  PyObject *__pyx_v_vperpIn = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_vperpOut = NULL;
  PyObject *__pyx_v_iIn = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_iOut = NULL;
  PyObject *__pyx_v_kpin = NULL;
  PyObject *__pyx_v_indNoNan = NULL;
  PyObject *__pyx_v_indout = NULL;
  PyObject *__pyx_v_pp = NULL;
  PyObject *__pyx_v_ee = NULL;
  PyObject *__pyx_v_ll = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VIn;
  __Pyx_Buffer __pyx_pybuffer_VIn;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPoly;
  __Pyx_Buffer __pyx_pybuffer_VPoly;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SLOW_LOS_Calc_PInOut_VesStruct", 0);
  __Pyx_INCREF(__pyx_v_Ds);
  __Pyx_INCREF(__pyx_v_dus);
  __Pyx_INCREF(__pyx_v_Lim);
  __Pyx_INCREF(__pyx_v_RMin);
  __pyx_pybuffer_VPoly.pybuffer.buf = NULL;
  __pyx_pybuffer_VPoly.refcount = 0;
  __pyx_pybuffernd_VPoly.data = NULL;
  __pyx_pybuffernd_VPoly.rcbuffer = &__pyx_pybuffer_VPoly;
  __pyx_pybuffer_VIn.pybuffer.buf = NULL;
  __pyx_pybuffer_VIn.refcount = 0;
  __pyx_pybuffernd_VIn.data = NULL;
  __pyx_pybuffernd_VIn.rcbuffer = &__pyx_pybuffer_VIn;
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer, (PyObject*)__pyx_v_VPoly, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6883, __pyx_L1_error)
  }
  __pyx_pybuffernd_VPoly.diminfo[0].strides = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPoly.diminfo[0].shape = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPoly.diminfo[1].strides = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPoly.diminfo[1].shape = __pyx_pybuffernd_VPoly.rcbuffer->pybuffer.shape[1];
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer, (PyObject*)__pyx_v_VIn, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_C_CONTIGUOUS, 2, 0, __pyx_stack) == -1)) __PYX_ERR(0, 6883, __pyx_L1_error)
  }
  __pyx_pybuffernd_VIn.diminfo[0].strides = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VIn.diminfo[0].shape = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VIn.diminfo[1].strides = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VIn.diminfo[1].shape = __pyx_pybuffernd_VIn.rcbuffer->pybuffer.shape[1];
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
  __Pyx_XDECREF(__pyx_t_31);
  __Pyx_XDECREF(__pyx_t_32);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.SLOW_LOS_Calc_PInOut_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VIn.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPoly.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF(__pyx_v_C1);
  __Pyx_XDECREF(__pyx_v_C2);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_NL);
  __Pyx_XDECREF(__pyx_v_IOut);
  __Pyx_XDECREF(__pyx_v_PIn);
  __Pyx_XDECREF(__pyx_v_POut);
  __Pyx_XDECREF(__pyx_v_VperpIn);
  __Pyx_XDECREF(__pyx_v_VperpOut);
  __Pyx_XDECREF(__pyx_v_IIn);
  __Pyx_XDECREF(__pyx_v_kPOut);
  __Pyx_XDECREF(__pyx_v_kPIn);
  __Pyx_XDECREF(__pyx_v_Ind);
  __Pyx_XDECREF(__pyx_v_lslim);
  __Pyx_XDECREF(__pyx_v_pIn);
  __Pyx_XDECREF(__pyx_v_pOut);
  __Pyx_XDECREF(__pyx_v_vperpIn);
  __Pyx_XDECREF(__pyx_v_vperpOut);
  __Pyx_XDECREF(__pyx_v_iIn);
  __Pyx_XDECREF(__pyx_v_iOut);
  __Pyx_XDECREF(__pyx_v_kpin);
  __Pyx_XDECREF(__pyx_v_indNoNan);
  __Pyx_XDECREF(__pyx_v_indout);
  __Pyx_XDECREF(__pyx_v_pp);
  __Pyx_XDECREF(__pyx_v_ee);
  __Pyx_XDECREF(__pyx_v_ll);
  __Pyx_XDECREF(__pyx_v_Ds);
  __Pyx_XDECREF(__pyx_v_dus);
  __Pyx_XDECREF(__pyx_v_Lim);
  __Pyx_XDECREF(__pyx_v_RMin);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__240 = PyTuple_Pack(48, __pyx_n_s_Ds, __pyx_n_s_dus, __pyx_n_s_VPoly, __pyx_n_s_VIn, __pyx_n_s_Lim, __pyx_n_s_nLim, __pyx_n_s_LSPoly, __pyx_n_s_LSLim, __pyx_n_s_lSnLim, __pyx_n_s_LSVIn, __pyx_n_s_RMin, __pyx_n_s_Forbid, __pyx_n_s_EpsUz, __pyx_n_s_EpsVz, __pyx_n_s_EpsA, __pyx_n_s_EpsB, __pyx_n_s_EpsPlane, __pyx_n_s_VType, __pyx_n_s_Test, __pyx_n_s_warn, __pyx_n_s_C1, __pyx_n_s_C2, __pyx_n_s_ii, __pyx_n_s_jj, __pyx_n_s_v, __pyx_n_s_NL, __pyx_n_s_IOut, __pyx_n_s_PIn, __pyx_n_s_POut, __pyx_n_s_VperpIn, __pyx_n_s_VperpOut, __pyx_n_s_IIn, __pyx_n_s_kPOut, __pyx_n_s_kPIn, __pyx_n_s_Ind, __pyx_n_s_lslim, __pyx_n_s_pIn, __pyx_n_s_pOut, __pyx_n_s_vperpIn, __pyx_n_s_vperpOut, __pyx_n_s_iIn, __pyx_n_s_iOut, __pyx_n_s_kpin, __pyx_n_s_indNoNan, __pyx_n_s_indout, __pyx_n_s_pp, __pyx_n_s_ee, __pyx_n_s_ll); if (unlikely(!__pyx_tuple__240)) __PYX_ERR(0, 6883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__240);
  __Pyx_GIVEREF(__pyx_tuple__240);
/* … */
  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_4tofu_4geom_5_GG03_83SLOW_LOS_Calc_PInOut_VesStruct, NULL, __pyx_n_s_tofu_geom__GG03); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6883, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SLOW_LOS_Calc_PInOut_VesStruct, __pyx_t_2) < 0) __PYX_ERR(0, 6883, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_codeobj__241 = (PyObject*)__Pyx_PyCode_New(19, 0, 48, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__240, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_tofu_geom__GG03_pyx, __pyx_n_s_SLOW_LOS_Calc_PInOut_VesStruct, 6883, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__241)) __PYX_ERR(0, 6883, __pyx_L1_error)
 6884:                               np.ndarray[double, ndim=2,mode='c'] VPoly,
 6885:                               np.ndarray[double, ndim=2,mode='c'] VIn,
+6886:                               Lim=None, nLim=None,
    values[4] = ((PyObject *)Py_None);
    values[5] = ((PyObject *)Py_None);
+6887:                               LSPoly=None, LSLim=None, lSnLim=None, LSVIn=None,
    values[6] = ((PyObject *)Py_None);
    values[7] = ((PyObject *)Py_None);
    values[8] = ((PyObject *)Py_None);
    values[9] = ((PyObject *)Py_None);
+6888:                               RMin=None, Forbid=True,
    values[10] = ((PyObject *)Py_None);
    values[11] = ((PyObject *)Py_True);
    values[12] = __pyx_k__124;
    values[13] = __pyx_k__125;
    values[14] = __pyx_k__126;
    values[15] = __pyx_k__127;
    values[16] = __pyx_k__128;
    values[17] = ((PyObject *)__pyx_n_s_Tor);
+6889:                               EpsUz=_SMALL, EpsVz=_VSMALL, EpsA=_VSMALL,
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__SMALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k__124 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k__125 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k__126 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+6890:                               EpsB=_VSMALL, EpsPlane=_VSMALL,
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k__127 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_4tofu_4geom_5_GG03__VSMALL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6890, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_k__128 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;
+6891:                               VType='Tor', Test=True):
    values[18] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Ds)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dus)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("SLOW_LOS_Calc_PInOut_VesStruct", 0, 4, 19, 1); __PYX_ERR(0, 6883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VPoly)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("SLOW_LOS_Calc_PInOut_VesStruct", 0, 4, 19, 2); __PYX_ERR(0, 6883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VIn)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("SLOW_LOS_Calc_PInOut_VesStruct", 0, 4, 19, 3); __PYX_ERR(0, 6883, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Lim);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nLim);
          if (value) { values[5] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  6:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSPoly);
          if (value) { values[6] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  7:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSLim);
          if (value) { values[7] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  8:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_lSnLim);
          if (value) { values[8] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  9:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_LSVIn);
          if (value) { values[9] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 10:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_RMin);
          if (value) { values[10] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 11:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Forbid);
          if (value) { values[11] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 12:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsUz);
          if (value) { values[12] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 13:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsVz);
          if (value) { values[13] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 14:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsA);
          if (value) { values[14] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 15:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsB);
          if (value) { values[15] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 16:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_EpsPlane);
          if (value) { values[16] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 17:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_VType);
          if (value) { values[17] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case 18:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_Test);
          if (value) { values[18] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SLOW_LOS_Calc_PInOut_VesStruct") < 0)) __PYX_ERR(0, 6883, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case 19: values[18] = PyTuple_GET_ITEM(__pyx_args, 18);
        CYTHON_FALLTHROUGH;
        case 18: values[17] = PyTuple_GET_ITEM(__pyx_args, 17);
        CYTHON_FALLTHROUGH;
        case 17: values[16] = PyTuple_GET_ITEM(__pyx_args, 16);
        CYTHON_FALLTHROUGH;
        case 16: values[15] = PyTuple_GET_ITEM(__pyx_args, 15);
        CYTHON_FALLTHROUGH;
        case 15: values[14] = PyTuple_GET_ITEM(__pyx_args, 14);
        CYTHON_FALLTHROUGH;
        case 14: values[13] = PyTuple_GET_ITEM(__pyx_args, 13);
        CYTHON_FALLTHROUGH;
        case 13: values[12] = PyTuple_GET_ITEM(__pyx_args, 12);
        CYTHON_FALLTHROUGH;
        case 12: values[11] = PyTuple_GET_ITEM(__pyx_args, 11);
        CYTHON_FALLTHROUGH;
        case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10);
        CYTHON_FALLTHROUGH;
        case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
        CYTHON_FALLTHROUGH;
        case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
        CYTHON_FALLTHROUGH;
        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
        CYTHON_FALLTHROUGH;
        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
        CYTHON_FALLTHROUGH;
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_Ds = values[0];
    __pyx_v_dus = values[1];
    __pyx_v_VPoly = ((PyArrayObject *)values[2]);
    __pyx_v_VIn = ((PyArrayObject *)values[3]);
    __pyx_v_Lim = values[4];
    __pyx_v_nLim = values[5];
    __pyx_v_LSPoly = values[6];
    __pyx_v_LSLim = values[7];
    __pyx_v_lSnLim = values[8];
    __pyx_v_LSVIn = values[9];
    __pyx_v_RMin = values[10];
    __pyx_v_Forbid = values[11];
    __pyx_v_EpsUz = values[12];
    __pyx_v_EpsVz = values[13];
    __pyx_v_EpsA = values[14];
    __pyx_v_EpsB = values[15];
    __pyx_v_EpsPlane = values[16];
    __pyx_v_VType = values[17];
    __pyx_v_Test = values[18];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("SLOW_LOS_Calc_PInOut_VesStruct", 0, 4, 19, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6883, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("tofu.geom._GG03.SLOW_LOS_Calc_PInOut_VesStruct", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VPoly), __pyx_ptype_5numpy_ndarray, 1, "VPoly", 0))) __PYX_ERR(0, 6884, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_VIn), __pyx_ptype_5numpy_ndarray, 1, "VIn", 0))) __PYX_ERR(0, 6885, __pyx_L1_error)
  __pyx_r = __pyx_pf_4tofu_4geom_5_GG03_82SLOW_LOS_Calc_PInOut_VesStruct(__pyx_self, __pyx_v_Ds, __pyx_v_dus, __pyx_v_VPoly, __pyx_v_VIn, __pyx_v_Lim, __pyx_v_nLim, __pyx_v_LSPoly, __pyx_v_LSLim, __pyx_v_lSnLim, __pyx_v_LSVIn, __pyx_v_RMin, __pyx_v_Forbid, __pyx_v_EpsUz, __pyx_v_EpsVz, __pyx_v_EpsA, __pyx_v_EpsB, __pyx_v_EpsPlane, __pyx_v_VType, __pyx_v_Test);
 6892: 
+6893:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6893, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6894:     warn("THIS IS THE OLD VERSION OF THIS FUNCTION, PLEASE USE THE NEW ONE",
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__129, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__129 = PyTuple_Pack(2, __pyx_kp_s_THIS_IS_THE_OLD_VERSION_OF_THIS, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(0, 6894, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__129);
  __Pyx_GIVEREF(__pyx_tuple__129);
+6895:          DeprecationWarning, stacklevel=2)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stacklevel, __pyx_int_2) < 0) __PYX_ERR(0, 6895, __pyx_L1_error)
+6896:     warn("THIS IS THE OLD VERSION OF THIS FUNCTION, PLEASE USE THE NEW ONE",
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__130, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__130 = PyTuple_Pack(2, __pyx_kp_s_THIS_IS_THE_OLD_VERSION_OF_THIS, __pyx_builtin_Warning); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(0, 6896, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__130);
  __Pyx_GIVEREF(__pyx_tuple__130);
 6897:          Warning)
 6898:     """ Compute the entry and exit point of all provided LOS for the provided
 6899:     vessel polygon (toroidal or linear), also return the normal vector at
 6900:     impact point and the index of the impact segment
 6901: 
 6902:     For each LOS,
 6903: 
 6904:     Parameters
 6905:     ----------
 6906: 
 6907: 
 6908: 
 6909:     Return
 6910:     ------
 6911:     PIn :       np.ndarray
 6912:         Point of entry (if any) of the LOS into the vessel, returned in (X,Y,Z)
 6913:         cartesian coordinates as:
 6914:             1 LOS => (3,) array or None if there is no entry point
 6915:             NL LOS => (3,NL), with NaNs when there is no entry point
 6916:     POut :      np.ndarray
 6917:         Point of exit of the LOS from the vessel, returned in (X,Y,Z) cartesian
 6918:         coordinates as:
 6919:             1 LOS => (3,) array or None if there is no entry point
 6920:             NL LOS => (3,NL), with NaNs when there is no entry point
 6921:     VOut :      np.ndarray
 6922: 
 6923:     IOut :      np.ndarray
 6924: 
 6925:     """
+6926:     if Test:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_Test); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6926, __pyx_L1_error)
  if (__pyx_t_3) {
/* … */
  }
+6927:         assert type(Ds) is np.ndarray and type(dus) is np.ndarray and \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_4 = (((PyObject *)Py_TYPE(__pyx_v_Ds)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_5 = (__pyx_t_4 != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }
      __pyx_t_5 = (((PyObject *)Py_TYPE(__pyx_v_dus)) == ((PyObject *)__pyx_ptype_5numpy_ndarray));
      __pyx_t_4 = (__pyx_t_5 != 0);
      if (__pyx_t_4) {
      } else {
        __pyx_t_3 = __pyx_t_4;
        goto __pyx_L4_bool_binop_done;
      }
+6928:             Ds.ndim in [1,2] and Ds.shape==dus.shape and \
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (!__pyx_t_5) {
      } else {
        __pyx_t_4 = __pyx_t_5;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_4 = __pyx_t_5;
      __pyx_L8_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_5 = (__pyx_t_4 != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dus, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6928, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L4_bool_binop_done;
      }
+6929:             Ds.shape[0]==3, (
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_shape); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6929, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6929, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_3 = __pyx_t_5;
      __pyx_L4_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_Ds_and_dus_must_be_of_the_s);
        __PYX_ERR(0, 6927, __pyx_L1_error)
      }
    }
    #endif
 6930:                 "Args Ds and dus must be of the same shape (3,) or (3,NL)!")
+6931:         assert VPoly.shape[0]==2 and VIn.shape[0]==2 and \
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = (((__pyx_v_VPoly->dimensions[0]) == 2) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_5 = (((__pyx_v_VIn->dimensions[0]) == 2) != 0);
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L11_bool_binop_done;
      }
+6932:             VIn.shape[1]==VPoly.shape[1]-1, (
      __pyx_t_5 = (((__pyx_v_VIn->dimensions[1]) == ((__pyx_v_VPoly->dimensions[1]) - 1)) != 0);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L11_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_VPoly_and_VIn_must_be_of_th);
        __PYX_ERR(0, 6931, __pyx_L1_error)
      }
    }
    #endif
 6933:                 "Args VPoly and VIn must be of the same shape (2,NS)!")
+6934:         C1 = all([pp is None for pp in [LSPoly,LSLim,LSVIn]])
    __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_v_LSPoly);
    __Pyx_GIVEREF(__pyx_v_LSPoly);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_LSPoly);
    __Pyx_INCREF(__pyx_v_LSLim);
    __Pyx_GIVEREF(__pyx_v_LSLim);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_LSLim);
    __Pyx_INCREF(__pyx_v_LSVIn);
    __Pyx_GIVEREF(__pyx_v_LSVIn);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_LSVIn);
    __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    for (;;) {
      if (__pyx_t_7 >= 3) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_7); __Pyx_INCREF(__pyx_t_2); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6934, __pyx_L1_error)
      #else
      __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6934, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_2);
      __pyx_t_2 = 0;
      __pyx_t_3 = (__pyx_v_pp == Py_None);
      __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6934, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 6934, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_C1 = __pyx_t_1;
    __pyx_t_1 = 0;
+6935:         C2 = all([hasattr(pp,'__iter__') and len(pp)==len(LSPoly) for pp
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
/* … */
      __pyx_t_3 = __Pyx_HasAttr(__pyx_v_pp, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 6935, __pyx_L1_error)
      if (__pyx_t_3) {
      } else {
        __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6935, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_6 = __pyx_t_8;
        __pyx_t_8 = 0;
        goto __pyx_L18_bool_binop_done;
      }
      __pyx_t_9 = PyObject_Length(__pyx_v_pp); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6935, __pyx_L1_error)
      __pyx_t_10 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6935, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_9 == __pyx_t_10);
      __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6935, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_6 = __pyx_t_8;
      __pyx_t_8 = 0;
      __pyx_L18_bool_binop_done:;
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_6))) __PYX_ERR(0, 6935, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_C2 = __pyx_t_2;
    __pyx_t_2 = 0;
+6936:                   in [LSPoly,LSLim,LSVIn]])
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_INCREF(__pyx_v_LSPoly);
    __Pyx_GIVEREF(__pyx_v_LSPoly);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_LSPoly);
    __Pyx_INCREF(__pyx_v_LSLim);
    __Pyx_GIVEREF(__pyx_v_LSLim);
    PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_LSLim);
    __Pyx_INCREF(__pyx_v_LSVIn);
    __Pyx_GIVEREF(__pyx_v_LSVIn);
    PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_LSVIn);
    __pyx_t_2 = __pyx_t_6; __Pyx_INCREF(__pyx_t_2); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    for (;;) {
      if (__pyx_t_7 >= 3) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6936, __pyx_L1_error)
      #else
      __pyx_t_6 = PySequence_ITEM(__pyx_t_2, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6936, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_pp, __pyx_t_6);
      __pyx_t_6 = 0;
+6937:         assert C1 or C2, "Args LSPoly,LSLim,LSVIn must be None or lists of same len()!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_C1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6937, __pyx_L1_error)
      if (!__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L20_bool_binop_done;
      }
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_C2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6937, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
      __pyx_L20_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_LSPoly_LSLim_LSVIn_must_be);
        __PYX_ERR(0, 6937, __pyx_L1_error)
      }
    }
    #endif
+6938:         assert RMin is None or type(RMin) in [float,int,np.float64,np.int64], (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_5 = (__pyx_v_RMin == Py_None);
      __pyx_t_4 = (__pyx_t_5 != 0);
      if (!__pyx_t_4) {
      } else {
        __pyx_t_3 = __pyx_t_4;
        goto __pyx_L22_bool_binop_done;
      }
      __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_RMin)));
      __pyx_t_2 = ((PyObject *)Py_TYPE(__pyx_v_RMin));
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_t_2), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!__pyx_t_5) {
      } else {
        __pyx_t_4 = __pyx_t_5;
        goto __pyx_L24_bool_binop_done;
      }
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_t_2), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!__pyx_t_5) {
      } else {
        __pyx_t_4 = __pyx_t_5;
        goto __pyx_L24_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_t_2), __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!__pyx_t_5) {
      } else {
        __pyx_t_4 = __pyx_t_5;
        goto __pyx_L24_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int64); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_t_2), __pyx_t_6, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6938, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_4 = __pyx_t_5;
      __pyx_L24_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = (__pyx_t_4 != 0);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L22_bool_binop_done:;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_RMin_must_be_None_or_a_float);
        __PYX_ERR(0, 6938, __pyx_L1_error)
      }
    }
    #endif
 6939:             "Arg RMin must be None or a float!")
+6940:         assert type(Forbid) is bool, "Arg Forbid must be a bool!"
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_Forbid)) == ((PyObject *)__pyx_ptype_7cpython_4bool_bool));
      if (unlikely(!(__pyx_t_3 != 0))) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_Forbid_must_be_a_bool);
        __PYX_ERR(0, 6940, __pyx_L1_error)
      }
    }
    #endif
+6941:         assert all([type(ee) in [int,float,np.int64,np.float64] and ee<1.e-4
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
/* … */
        __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_ee)));
        __pyx_t_8 = ((PyObject *)Py_TYPE(__pyx_v_ee));
        __pyx_t_11 = PyObject_RichCompare(((PyObject *)__pyx_t_8), ((PyObject *)(&PyInt_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (!__pyx_t_5) {
        } else {
          __pyx_t_3 = __pyx_t_5;
          goto __pyx_L32_bool_binop_done;
        }
        __pyx_t_11 = PyObject_RichCompare(((PyObject *)__pyx_t_8), ((PyObject *)(&PyFloat_Type)), Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (!__pyx_t_5) {
        } else {
          __pyx_t_3 = __pyx_t_5;
          goto __pyx_L32_bool_binop_done;
        }
        __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_int64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = PyObject_RichCompare(((PyObject *)__pyx_t_8), __pyx_t_12, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (!__pyx_t_5) {
        } else {
          __pyx_t_3 = __pyx_t_5;
          goto __pyx_L32_bool_binop_done;
        }
        __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_float64); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_11 = PyObject_RichCompare(((PyObject *)__pyx_t_8), __pyx_t_12, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __pyx_t_3 = __pyx_t_5;
        __pyx_L32_bool_binop_done:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_5 = __pyx_t_3;
        if (__pyx_t_5) {
        } else {
          __pyx_t_8 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6941, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_1 = __pyx_t_8;
          __pyx_t_8 = 0;
          goto __pyx_L30_bool_binop_done;
        }
        __pyx_t_8 = PyObject_RichCompare(__pyx_v_ee, __pyx_float_1_eneg_4, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_INCREF(__pyx_t_8);
        __pyx_t_1 = __pyx_t_8;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_L30_bool_binop_done:;
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 6941, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6941, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6941, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Args_EpsUz_EpsVz_EpsA_EpsB_must);
        __PYX_ERR(0, 6941, __pyx_L1_error)
      }
    }
    #endif
+6942:                     for ee in [EpsUz,EpsVz,EpsA,EpsB,EpsPlane]]), \
      __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6942, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_EpsUz);
      __Pyx_GIVEREF(__pyx_v_EpsUz);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_EpsUz);
      __Pyx_INCREF(__pyx_v_EpsVz);
      __Pyx_GIVEREF(__pyx_v_EpsVz);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_EpsVz);
      __Pyx_INCREF(__pyx_v_EpsA);
      __Pyx_GIVEREF(__pyx_v_EpsA);
      PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_EpsA);
      __Pyx_INCREF(__pyx_v_EpsB);
      __Pyx_GIVEREF(__pyx_v_EpsB);
      PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_EpsB);
      __Pyx_INCREF(__pyx_v_EpsPlane);
      __Pyx_GIVEREF(__pyx_v_EpsPlane);
      PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_EpsPlane);
      __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (__pyx_t_7 >= 5) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_1); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 6942, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6942, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
        __Pyx_XDECREF_SET(__pyx_v_ee, __pyx_t_1);
        __pyx_t_1 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6943:                         "Args [EpsUz,EpsVz,EpsA,EpsB] must be floats < 1.e-4!"
+6944:         assert type(VType) is str and VType.lower() in ['tor','lin'], (
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_VType)) == ((PyObject *)(&PyString_Type)));
      __pyx_t_4 = (__pyx_t_3 != 0);
      if (__pyx_t_4) {
      } else {
        __pyx_t_5 = __pyx_t_4;
        goto __pyx_L36_bool_binop_done;
      }
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6944, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
        if (likely(__pyx_t_1)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
          __Pyx_INCREF(__pyx_t_1);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_2, function);
        }
      }
      __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6944, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6944, __pyx_L1_error)
      if (!__pyx_t_3) {
      } else {
        __pyx_t_4 = __pyx_t_3;
        goto __pyx_L38_bool_binop_done;
      }
      __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_lin, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6944, __pyx_L1_error)
      __pyx_t_4 = __pyx_t_3;
      __pyx_L38_bool_binop_done:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_3 = (__pyx_t_4 != 0);
      __pyx_t_5 = __pyx_t_3;
      __pyx_L36_bool_binop_done:;
      if (unlikely(!__pyx_t_5)) {
        PyErr_SetObject(PyExc_AssertionError, __pyx_kp_s_Arg_VType_must_be_a_str_in_Tor_L_2);
        __PYX_ERR(0, 6944, __pyx_L1_error)
      }
    }
    #endif
 6945:             "Arg VType must be a str in ['Tor','Lin']!")
 6946: 
 6947:     cdef int ii, jj
 6948: 
+6949:     print("\n ---- > Using the WRONG one !!!!!!!\n")
  if (__Pyx_PrintOne(0, __pyx_kp_s_Using_the_WRONG_one) < 0) __PYX_ERR(0, 6949, __pyx_L1_error)
+6950:     if nLim==0:
  __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_nLim, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6950, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6950, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L40;
  }
+6951:         Lim = None
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_Lim, Py_None);
+6952:     elif nLim==1:
  __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_v_nLim, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6952, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6952, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_5) {
/* … */
  }
  __pyx_L40:;
+6953:         Lim = [Lim[0,0],Lim[0,1]]
    __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__33); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_Lim, __pyx_tuple__34); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_6);
    PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_2);
    PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
    __pyx_t_6 = 0;
    __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_Lim, __pyx_t_1);
    __pyx_t_1 = 0;
+6954:     if lSnLim is not None:
  __pyx_t_5 = (__pyx_v_lSnLim != Py_None);
  __pyx_t_3 = (__pyx_t_5 != 0);
  if (__pyx_t_3) {
/* … */
  }
+6955:         for ii in range(0,len(lSnLim)):
    __pyx_t_7 = PyObject_Length(__pyx_v_lSnLim); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6955, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_7;
    for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_10; __pyx_t_13+=1) {
      __pyx_v_ii = __pyx_t_13;
+6956:             if lSnLim[ii]==0:
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_lSnLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6956, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6956, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6956, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_3) {
/* … */
        goto __pyx_L44;
      }
+6957:                 LSLim[ii] = None
        if (unlikely(__Pyx_SetItemInt(__pyx_v_LSLim, __pyx_v_ii, Py_None, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0)) __PYX_ERR(0, 6957, __pyx_L1_error)
+6958:             elif lSnLim[ii]==1:
      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_lSnLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6958, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6958, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6958, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_3) {
/* … */
      }
      __pyx_L44:;
    }
+6959:                 LSLim[ii] = [LSLim[ii][0,0],LSLim[ii][0,1]]
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_tuple__33); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_tuple__34); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_GIVEREF(__pyx_t_2);
        PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_6);
        PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_6);
        __pyx_t_2 = 0;
        __pyx_t_6 = 0;
        if (unlikely(__Pyx_SetItemInt(__pyx_v_LSLim, __pyx_v_ii, __pyx_t_1, int, 1, __Pyx_PyInt_From_int, 0, 0, 0) < 0)) __PYX_ERR(0, 6959, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6960: 
+6961:     v = Ds.ndim==2
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyInt_EqObjC(__pyx_t_1, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_v = __pyx_t_6;
  __pyx_t_6 = 0;
+6962:     if not v:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_v); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6962, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_3) != 0);
  if (__pyx_t_5) {
/* … */
  }
+6963:         Ds, dus = Ds.reshape((3,1)), dus.reshape((3,1))
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_reshape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_tuple__49);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dus, __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_tuple__49) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_tuple__49);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6963, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_Ds, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_dus, __pyx_t_1);
    __pyx_t_1 = 0;
+6964:     NL = Ds.shape[1]
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_NL = __pyx_t_6;
  __pyx_t_6 = 0;
+6965:     IOut = np.zeros((3,Ds.shape[1]))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_Ds, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_8);
  __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6965, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_IOut = __pyx_t_6;
  __pyx_t_6 = 0;
+6966:     if VType.lower()=='tor':
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_VType, __pyx_n_s_lower); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_n_s_tor, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 6966, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_5) {
/* … */
    goto __pyx_L46;
  }
 6967:         # RMin is necessary to avoid looking on the other side of the tokamak
+6968:         if RMin is None:
    __pyx_t_5 = (__pyx_v_RMin == Py_None);
    __pyx_t_3 = (__pyx_t_5 != 0);
    if (__pyx_t_3) {
/* … */
    }
+6969:             RMin = 0.95*min(np.min(VPoly[0,:]),
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_VPoly), __pyx_tuple__36); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_15 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_15)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_15);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
        }
      }
      __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_15, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
      __pyx_t_6 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6969, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF_SET(__pyx_v_RMin, __pyx_t_6);
      __pyx_t_6 = 0;
+6970:                             np.min(np.hypot(Ds[0,:],Ds[1,:])))
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_hypot); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_Ds, __pyx_tuple__36); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_Ds, __pyx_tuple__42); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_14 = NULL;
      __pyx_t_13 = 0;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_11);
        if (likely(__pyx_t_14)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
          __Pyx_INCREF(__pyx_t_14);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_11, function);
          __pyx_t_13 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_8, __pyx_t_12};
        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6970, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
        PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_t_8, __pyx_t_12};
        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_13, 2+__pyx_t_13); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6970, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      } else
      #endif
      {
        __pyx_t_15 = PyTuple_New(2+__pyx_t_13); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6970, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        if (__pyx_t_14) {
          __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14); __pyx_t_14 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_13, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_12);
        PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_13, __pyx_t_12);
        __pyx_t_8 = 0;
        __pyx_t_12 = 0;
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6970, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      }
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_11)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_11);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_11, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6970, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_3) {
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_11 = __pyx_t_6;
      } else {
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_11 = __pyx_t_1;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6971: 
 6972:         # Main function to compute intersections with Vessel
+6973:         PIn, POut, \
    __pyx_v_PIn = __pyx_t_11;
    __pyx_t_11 = 0;
    __pyx_v_POut = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_v_VperpIn = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_VperpOut = __pyx_t_15;
    __pyx_t_15 = 0;
    __pyx_v_IIn = __pyx_t_12;
    __pyx_t_12 = 0;
 6974:             VperpIn, VperpOut, \
+6975:             IIn, IOut[2,:] = Calc_LOS_PInOut_Tor(Ds, dus, VPoly, VIn, Lim=Lim,
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_Ds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_dus, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VIn), PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 6975, __pyx_L1_error)
/* … */
    __pyx_t_25.__pyx_n = 8;
    __pyx_t_25.Lim = __pyx_v_Lim;
    __pyx_t_25.Forbid = ((PyBoolObject *)__pyx_v_Forbid);
    __pyx_t_25.RMin = __pyx_v_RMin;
    __pyx_t_25.EpsUz = __pyx_t_20;
    __pyx_t_25.EpsVz = __pyx_t_21;
    __pyx_t_25.EpsA = __pyx_t_22;
    __pyx_t_25.EpsB = __pyx_t_23;
    __pyx_t_25.EpsPlane = __pyx_t_24;
    __pyx_t_6 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor(__pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, &__pyx_t_25); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
    __pyx_t_17.memview = NULL;
    __pyx_t_17.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
    __pyx_t_18.memview = NULL;
    __pyx_t_18.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
    __pyx_t_19.memview = NULL;
    __pyx_t_19.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
      PyObject* sequence = __pyx_t_6;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 6)) {
        if (size > 6) __Pyx_RaiseTooManyValuesError(6);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 6973, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_15 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_12 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 5); 
      } else {
        __pyx_t_11 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_2 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_15 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_12 = PyList_GET_ITEM(sequence, 4); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 5); 
      }
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_12);
      __Pyx_INCREF(__pyx_t_8);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[6] = {&__pyx_t_11,&__pyx_t_1,&__pyx_t_2,&__pyx_t_15,&__pyx_t_12,&__pyx_t_8};
        for (i=0; i < 6; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 6973, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[6] = {&__pyx_t_11,&__pyx_t_1,&__pyx_t_2,&__pyx_t_15,&__pyx_t_12,&__pyx_t_8};
      __pyx_t_14 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6973, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_26 = Py_TYPE(__pyx_t_14)->tp_iternext;
      for (index=0; index < 6; index++) {
        PyObject* item = __pyx_t_26(__pyx_t_14); if (unlikely(!item)) goto __pyx_L48_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_26(__pyx_t_14), 6) < 0) __PYX_ERR(0, 6973, __pyx_L1_error)
      __pyx_t_26 = NULL;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      goto __pyx_L49_unpacking_done;
      __pyx_L48_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_26 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 6973, __pyx_L1_error)
      __pyx_L49_unpacking_done:;
    }
/* … */
    if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_tuple__32, __pyx_t_8) < 0)) __PYX_ERR(0, 6975, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+6976:                                                  Forbid=Forbid, RMin=RMin,
    if (!(likely(((__pyx_v_Forbid) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_Forbid, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 6976, __pyx_L1_error)
+6977:                                                  EpsUz=EpsUz, EpsVz=EpsVz,
    __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_v_EpsUz); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6977, __pyx_L1_error)
    __pyx_t_21 = __pyx_PyFloat_AsDouble(__pyx_v_EpsVz); if (unlikely((__pyx_t_21 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6977, __pyx_L1_error)
+6978:                                                  EpsA=EpsA, EpsB=EpsB,
    __pyx_t_22 = __pyx_PyFloat_AsDouble(__pyx_v_EpsA); if (unlikely((__pyx_t_22 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6978, __pyx_L1_error)
    __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsB); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6978, __pyx_L1_error)
+6979:                                                  EpsPlane=EpsPlane)
    __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 6979, __pyx_L1_error)
 6980: 
 6981:         # k = coordinate (in m) along the line from D
+6982:         kPOut = np.sqrt(np.sum((POut-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sum); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Subtract(__pyx_v_POut, __pyx_v_Ds); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = PyNumber_Power(__pyx_t_8, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 6982, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_6 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_2, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_v_kPOut = __pyx_t_6;
    __pyx_t_6 = 0;
+6983:         kPIn = np.sqrt(np.sum((PIn-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sum); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyNumber_Subtract(__pyx_v_PIn, __pyx_v_Ds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_8 = PyNumber_Power(__pyx_t_12, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_8);
    __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 6983, __pyx_L1_error)
    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_12, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_6 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_15);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6983, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_kPIn = __pyx_t_6;
    __pyx_t_6 = 0;
+6984:         assert np.allclose(kPOut,np.sum((POut-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_allclose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sum); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Subtract(__pyx_v_POut, __pyx_v_Ds); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = PyNumber_Multiply(__pyx_t_6, __pyx_v_dus); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 6984, __pyx_L1_error)
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_v_kPOut);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_12);
      __pyx_t_12 = 0;
      __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 6984, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, __pyx_t_12); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6984, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6984, __pyx_L1_error)
      }
    }
    #endif
+6985:         assert np.allclose(kPIn,np.sum((PIn-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_allclose); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sum); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyNumber_Subtract(__pyx_v_PIn, __pyx_v_Ds); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_1 = PyNumber_Multiply(__pyx_t_6, __pyx_v_dus); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 6985, __pyx_L1_error)
      __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_kPIn);
      __Pyx_GIVEREF(__pyx_v_kPIn);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_kPIn);
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_15);
      __pyx_t_15 = 0;
      __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 6985, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 6985, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 6985, __pyx_L1_error)
      }
    }
    #endif
 6986: 
 6987:         # If there are Struct, call the same function
 6988:         # Structural optimzation : do everything in one big for loop and only
 6989:         # keep the relevant points (to save memory)
+6990:         if LSPoly is not None:
    __pyx_t_3 = (__pyx_v_LSPoly != Py_None);
    __pyx_t_5 = (__pyx_t_3 != 0);
    if (__pyx_t_5) {
/* … */
    }
+6991:             Ind = np.zeros((2,NL))
      __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_int_2);
      __Pyx_GIVEREF(__pyx_int_2);
      PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_int_2);
      __Pyx_INCREF(__pyx_v_NL);
      __Pyx_GIVEREF(__pyx_v_NL);
      PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_NL);
      __pyx_t_12 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_12)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_12, __pyx_t_15) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_15);
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6991, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_Ind = __pyx_t_6;
      __pyx_t_6 = 0;
+6992:             for ii in range(0,len(LSPoly)):
      __pyx_t_7 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6992, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_7;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_10; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+6993:                 if LSLim[ii] is None or not all([hasattr(ll,'__iter__') for ll in LSLim[ii]]):
        __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6993, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = (__pyx_t_6 == Py_None);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_4 = (__pyx_t_3 != 0);
        if (!__pyx_t_4) {
        } else {
          __pyx_t_5 = __pyx_t_4;
          goto __pyx_L54_bool_binop_done;
        }
        __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6993, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6993, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
          __pyx_t_15 = __pyx_t_1; __Pyx_INCREF(__pyx_t_15); __pyx_t_9 = 0;
          __pyx_t_27 = NULL;
        } else {
          __pyx_t_9 = -1; __pyx_t_15 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6993, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_27 = Py_TYPE(__pyx_t_15)->tp_iternext; if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 6993, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        for (;;) {
          if (likely(!__pyx_t_27)) {
            if (likely(PyList_CheckExact(__pyx_t_15))) {
              if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_15)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyList_GET_ITEM(__pyx_t_15, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 6993, __pyx_L1_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_15, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6993, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            } else {
              if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_15)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_15, __pyx_t_9); __Pyx_INCREF(__pyx_t_1); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 6993, __pyx_L1_error)
              #else
              __pyx_t_1 = PySequence_ITEM(__pyx_t_15, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6993, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              #endif
            }
          } else {
            __pyx_t_1 = __pyx_t_27(__pyx_t_15);
            if (unlikely(!__pyx_t_1)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 6993, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_1);
          }
          __Pyx_XDECREF_SET(__pyx_v_ll, __pyx_t_1);
          __pyx_t_1 = 0;
          __pyx_t_4 = __Pyx_HasAttr(__pyx_v_ll, __pyx_n_s_iter); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 6993, __pyx_L1_error)
          __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6993, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_6, (PyObject*)__pyx_t_1))) __PYX_ERR(0, 6993, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        }
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6993, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 6993, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_3 = ((!__pyx_t_4) != 0);
        __pyx_t_5 = __pyx_t_3;
        __pyx_L54_bool_binop_done:;
        if (__pyx_t_5) {
/* … */
          goto __pyx_L53;
        }
+6994:                     lslim = [LSLim[ii]]
          __pyx_t_15 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 6994, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_6 = PyList_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6994, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_GIVEREF(__pyx_t_15);
          PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_15);
          __pyx_t_15 = 0;
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_6);
          __pyx_t_6 = 0;
 6995:                 else:
+6996:                     lslim = LSLim[ii]
        /*else*/ {
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6996, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_6);
          __pyx_t_6 = 0;
        }
        __pyx_L53:;
+6997:                 for jj in range(0,len(lslim)):
        __pyx_t_9 = PyObject_Length(__pyx_v_lslim); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 6997, __pyx_L1_error)
        __pyx_t_28 = __pyx_t_9;
        for (__pyx_t_29 = 0; __pyx_t_29 < __pyx_t_28; __pyx_t_29+=1) {
          __pyx_v_jj = __pyx_t_29;
+6998:                     pIn, pOut,\
          __Pyx_XDECREF_SET(__pyx_v_pIn, __pyx_t_6);
          __pyx_t_6 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pOut, __pyx_t_1);
          __pyx_t_1 = 0;
          __Pyx_XDECREF_SET(__pyx_v_vperpIn, __pyx_t_12);
          __pyx_t_12 = 0;
          __Pyx_XDECREF_SET(__pyx_v_vperpOut, __pyx_t_8);
          __pyx_t_8 = 0;
          __Pyx_XDECREF_SET(__pyx_v_iIn, __pyx_t_2);
          __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_iOut, __pyx_t_11);
          __pyx_t_11 = 0;
 6999:                         vperpIn, vperpOut,\
+7000:                         iIn, iOut = Calc_LOS_PInOut_Tor(Ds, dus, LSPoly[ii],
          __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_Ds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 7000, __pyx_L1_error)
          __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_dus, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 7000, __pyx_L1_error)
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_LSPoly, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 7000, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
          __pyx_t_25.__pyx_n = 8;
          __pyx_t_25.Lim = __pyx_t_6;
          __pyx_t_25.Forbid = ((PyBoolObject *)__pyx_v_Forbid);
          __pyx_t_25.RMin = __pyx_v_RMin;
          __pyx_t_25.EpsUz = __pyx_t_24;
          __pyx_t_25.EpsVz = __pyx_t_23;
          __pyx_t_25.EpsA = __pyx_t_22;
          __pyx_t_25.EpsB = __pyx_t_21;
          __pyx_t_25.EpsPlane = __pyx_t_20;
          __pyx_t_15 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor(__pyx_t_19, __pyx_t_18, __pyx_t_17, __pyx_t_16, &__pyx_t_25); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
          __pyx_t_19.memview = NULL;
          __pyx_t_19.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
          __pyx_t_18.memview = NULL;
          __pyx_t_18.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
          __pyx_t_17.memview = NULL;
          __pyx_t_17.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
          __pyx_t_16.memview = NULL;
          __pyx_t_16.data = NULL;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_15))) || (PyList_CheckExact(__pyx_t_15))) {
            PyObject* sequence = __pyx_t_15;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 6)) {
              if (size > 6) __Pyx_RaiseTooManyValuesError(6);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 6998, __pyx_L1_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
              __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2); 
              __pyx_t_8 = PyTuple_GET_ITEM(sequence, 3); 
              __pyx_t_2 = PyTuple_GET_ITEM(sequence, 4); 
              __pyx_t_11 = PyTuple_GET_ITEM(sequence, 5); 
            } else {
              __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
              __pyx_t_12 = PyList_GET_ITEM(sequence, 2); 
              __pyx_t_8 = PyList_GET_ITEM(sequence, 3); 
              __pyx_t_2 = PyList_GET_ITEM(sequence, 4); 
              __pyx_t_11 = PyList_GET_ITEM(sequence, 5); 
            }
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_11);
            #else
            {
              Py_ssize_t i;
              PyObject** temps[6] = {&__pyx_t_6,&__pyx_t_1,&__pyx_t_12,&__pyx_t_8,&__pyx_t_2,&__pyx_t_11};
              for (i=0; i < 6; i++) {
                PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 6998, __pyx_L1_error)
                __Pyx_GOTREF(item);
                *(temps[i]) = item;
              }
            }
            #endif
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          } else {
            Py_ssize_t index = -1;
            PyObject** temps[6] = {&__pyx_t_6,&__pyx_t_1,&__pyx_t_12,&__pyx_t_8,&__pyx_t_2,&__pyx_t_11};
            __pyx_t_14 = PyObject_GetIter(__pyx_t_15); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 6998, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_26 = Py_TYPE(__pyx_t_14)->tp_iternext;
            for (index=0; index < 6; index++) {
              PyObject* item = __pyx_t_26(__pyx_t_14); if (unlikely(!item)) goto __pyx_L60_unpacking_failed;
              __Pyx_GOTREF(item);
              *(temps[index]) = item;
            }
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_26(__pyx_t_14), 6) < 0) __PYX_ERR(0, 6998, __pyx_L1_error)
            __pyx_t_26 = NULL;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            goto __pyx_L61_unpacking_done;
            __pyx_L60_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_26 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 6998, __pyx_L1_error)
            __pyx_L61_unpacking_done:;
          }
+7001:                                                         LSVIn[ii], Lim=lslim[jj],
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_LSVIn, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7001, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 7001, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7001, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
+7002:                                                         Forbid=Forbid, RMin=RMin,
          if (!(likely(((__pyx_v_Forbid) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_Forbid, __pyx_ptype_7cpython_4bool_bool))))) __PYX_ERR(0, 7002, __pyx_L1_error)
+7003:                                                         EpsUz=EpsUz, EpsVz=EpsVz,
          __pyx_t_24 = __pyx_PyFloat_AsDouble(__pyx_v_EpsUz); if (unlikely((__pyx_t_24 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7003, __pyx_L1_error)
          __pyx_t_23 = __pyx_PyFloat_AsDouble(__pyx_v_EpsVz); if (unlikely((__pyx_t_23 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7003, __pyx_L1_error)
+7004:                                                         EpsA=EpsA, EpsB=EpsB,
          __pyx_t_22 = __pyx_PyFloat_AsDouble(__pyx_v_EpsA); if (unlikely((__pyx_t_22 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7004, __pyx_L1_error)
          __pyx_t_21 = __pyx_PyFloat_AsDouble(__pyx_v_EpsB); if (unlikely((__pyx_t_21 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7004, __pyx_L1_error)
+7005:                                                         EpsPlane=EpsPlane)
          __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7005, __pyx_L1_error)
+7006:                     kpin = np.sqrt(np.sum((Ds-pIn)**2,axis=0))
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_sum); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyNumber_Subtract(__pyx_v_Ds, __pyx_v_pIn); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = PyNumber_Power(__pyx_t_11, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_12);
          __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          if (PyDict_SetItem(__pyx_t_12, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7006, __pyx_L1_error)
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_12)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_12);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_15 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_12, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7006, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kpin, __pyx_t_15);
          __pyx_t_15 = 0;
+7007:                     indNoNan = (~np.isnan(kpin)) & (~np.isnan(kPOut))
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_15 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyNumber_Invert(__pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_isnan); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_2)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_2);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_15 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_2, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyNumber_Invert(__pyx_t_15); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = PyNumber_And(__pyx_t_1, __pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7007, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indNoNan, __pyx_t_15);
          __pyx_t_15 = 0;
+7008:                     indout = np.zeros((NL,),dtype=bool)
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_zeros); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_INCREF(__pyx_v_NL);
          __Pyx_GIVEREF(__pyx_v_NL);
          PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_NL);
          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_15);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_15);
          __pyx_t_15 = 0;
          __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 7008, __pyx_L1_error)
          __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_1, __pyx_t_15); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7008, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indout, __pyx_t_2);
          __pyx_t_2 = 0;
+7009:                     indout[indNoNan] = kpin[indNoNan]<kPOut[indNoNan]
          __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indNoNan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7009, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_v_kPOut, __pyx_v_indNoNan); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7009, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_15, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7009, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_v_indNoNan, __pyx_t_1) < 0)) __PYX_ERR(0, 7009, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+7010:                     indout[(~np.isnan(kpin)) & np.isnan(kPOut)] = True
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_isnan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_15, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Invert(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_isnan); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_12))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_12);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_12, function);
            }
          }
          __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_15, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = PyNumber_And(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_t_12, Py_True) < 0)) __PYX_ERR(0, 7010, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+7011:                     if np.any(indout):
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7011, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_any); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7011, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_2, function);
            }
          }
          __pyx_t_12 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_indout) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_indout);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7011, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 7011, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if (__pyx_t_5) {
/* … */
          }
        }
      }
+7012:                         kPOut[indout] = kpin[indout]
            __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indout); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7012, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            if (unlikely(PyObject_SetItem(__pyx_v_kPOut, __pyx_v_indout, __pyx_t_12) < 0)) __PYX_ERR(0, 7012, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+7013:                         POut[:,indout] = pIn[:,indout]
            __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7013, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_indout);
            __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_pIn, __pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7013, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7013, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_POut, __pyx_t_12, __pyx_t_2) < 0)) __PYX_ERR(0, 7013, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7014:                         VperpOut[:,indout] = vperpIn[:,indout]
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indout);
            __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_vperpIn, __pyx_t_2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7014, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_VperpOut, __pyx_t_2, __pyx_t_12) < 0)) __PYX_ERR(0, 7014, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+7015:                         IOut[2,indout] = iIn[indout]
            __pyx_t_12 = __Pyx_PyObject_GetItem(__pyx_v_iIn, __pyx_v_indout); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7015, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7015, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_int_2);
            __Pyx_GIVEREF(__pyx_int_2);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_2);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_2, __pyx_t_12) < 0)) __PYX_ERR(0, 7015, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+7016:                         IOut[0,indout] = 1+ii
            __pyx_t_12 = __Pyx_PyInt_From_long((1 + __pyx_v_ii)); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7016, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7016, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_int_0);
            __Pyx_GIVEREF(__pyx_int_0);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_0);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_2, __pyx_t_12) < 0)) __PYX_ERR(0, 7016, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+7017:                         IOut[1,indout] = jj
            __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7017, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_12);
            __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7017, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_INCREF(__pyx_int_1);
            __Pyx_GIVEREF(__pyx_int_1);
            PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_1);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_2, __pyx_t_12) < 0)) __PYX_ERR(0, 7017, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
 7018:     else:
+7019:         PIn, POut, \
  /*else*/ {
/* … */
    __pyx_v_PIn = __pyx_t_2;
    __pyx_t_2 = 0;
    __pyx_v_POut = __pyx_t_1;
    __pyx_t_1 = 0;
    __pyx_v_VperpIn = __pyx_t_15;
    __pyx_t_15 = 0;
    __pyx_v_VperpOut = __pyx_t_11;
    __pyx_t_11 = 0;
    __pyx_v_IIn = __pyx_t_8;
    __pyx_t_8 = 0;
 7020:             VperpIn, VperpOut, \
+7021:             IIn, IOut[2,:] = Calc_LOS_PInOut_Lin(Ds, dus, VPoly, VIn,
    __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_Ds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 7021, __pyx_L1_error)
    __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_dus, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 7021, __pyx_L1_error)
    __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPoly), PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 7021, __pyx_L1_error)
    __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VIn), PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 7021, __pyx_L1_error)
/* … */
    __pyx_t_30.__pyx_n = 1;
    __pyx_t_30.EpsPlane = __pyx_t_20;
    __pyx_t_12 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin(__pyx_t_16, __pyx_t_17, __pyx_t_18, __pyx_t_19, __pyx_v_Lim, &__pyx_t_30); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7021, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
    __pyx_t_16.memview = NULL;
    __pyx_t_16.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
    __pyx_t_17.memview = NULL;
    __pyx_t_17.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
    __pyx_t_18.memview = NULL;
    __pyx_t_18.data = NULL;
    __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
    __pyx_t_19.memview = NULL;
    __pyx_t_19.data = NULL;
    if ((likely(PyTuple_CheckExact(__pyx_t_12))) || (PyList_CheckExact(__pyx_t_12))) {
      PyObject* sequence = __pyx_t_12;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 6)) {
        if (size > 6) __Pyx_RaiseTooManyValuesError(6);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 7019, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_11 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 4); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 5); 
      } else {
        __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_15 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_11 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 4); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 5); 
      }
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[6] = {&__pyx_t_2,&__pyx_t_1,&__pyx_t_15,&__pyx_t_11,&__pyx_t_8,&__pyx_t_6};
        for (i=0; i < 6; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 7019, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[6] = {&__pyx_t_2,&__pyx_t_1,&__pyx_t_15,&__pyx_t_11,&__pyx_t_8,&__pyx_t_6};
      __pyx_t_14 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7019, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_26 = Py_TYPE(__pyx_t_14)->tp_iternext;
      for (index=0; index < 6; index++) {
        PyObject* item = __pyx_t_26(__pyx_t_14); if (unlikely(!item)) goto __pyx_L63_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_26(__pyx_t_14), 6) < 0) __PYX_ERR(0, 7019, __pyx_L1_error)
      __pyx_t_26 = NULL;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      goto __pyx_L64_unpacking_done;
      __pyx_L63_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __pyx_t_26 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 7019, __pyx_L1_error)
      __pyx_L64_unpacking_done:;
    }
/* … */
    if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_tuple__32, __pyx_t_6) < 0)) __PYX_ERR(0, 7021, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7022:                                                  Lim, EpsPlane=EpsPlane)
    __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7022, __pyx_L1_error)
+7023:         kPOut = np.sqrt(np.sum((POut-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_sum); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Subtract(__pyx_v_POut, __pyx_v_Ds); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_15 = PyNumber_Power(__pyx_t_6, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_15 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (PyDict_SetItem(__pyx_t_15, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7023, __pyx_L1_error)
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_6, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_15 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_15)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_12 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_15, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7023, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_v_kPOut = __pyx_t_12;
    __pyx_t_12 = 0;
+7024:         kPIn = np.sqrt(np.sum((PIn-Ds)**2,axis=0))
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_sum); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_Subtract(__pyx_v_PIn, __pyx_v_Ds); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = PyNumber_Power(__pyx_t_8, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7024, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, __pyx_t_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_12 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7024, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_kPIn = __pyx_t_12;
    __pyx_t_12 = 0;
+7025:         assert np.allclose(kPOut,np.sum((POut-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_allclose); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sum); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyNumber_Subtract(__pyx_v_POut, __pyx_v_Ds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_6 = PyNumber_Multiply(__pyx_t_12, __pyx_v_dus); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_6);
      __pyx_t_6 = 0;
      __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7025, __pyx_L1_error)
      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_12, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_v_kPOut);
      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_kPOut);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_8);
      __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (PyDict_SetItem(__pyx_t_8, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 7025, __pyx_L1_error)
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, __pyx_t_8); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 7025, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_5)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 7025, __pyx_L1_error)
      }
    }
    #endif
+7026:         assert np.allclose(kPIn,np.sum((PIn-Ds)*dus,axis=0),equal_nan=True)
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(!Py_OptimizeFlag)) {
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_allclose); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyNumber_Subtract(__pyx_v_PIn, __pyx_v_Ds); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_1 = PyNumber_Multiply(__pyx_t_12, __pyx_v_dus); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __pyx_t_12 = PyTuple_New(1); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_1);
      __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7026, __pyx_L1_error)
      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_12, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_v_kPIn);
      __Pyx_GIVEREF(__pyx_v_kPIn);
      PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_kPIn);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_11);
      __pyx_t_11 = 0;
      __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_equal_nan, Py_True) < 0) __PYX_ERR(0, 7026, __pyx_L1_error)
      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 7026, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_5)) {
        PyErr_SetNone(PyExc_AssertionError);
        __PYX_ERR(0, 7026, __pyx_L1_error)
      }
    }
    #endif
+7027:         if LSPoly is not None:
    __pyx_t_5 = (__pyx_v_LSPoly != Py_None);
    __pyx_t_3 = (__pyx_t_5 != 0);
    if (__pyx_t_3) {
/* … */
    }
  }
  __pyx_L46:;
+7028:             Ind = np.zeros((2,NL))
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_n_s_np); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(__pyx_int_2);
      __Pyx_GIVEREF(__pyx_int_2);
      PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_int_2);
      __Pyx_INCREF(__pyx_v_NL);
      __Pyx_GIVEREF(__pyx_v_NL);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_NL);
      __pyx_t_8 = NULL;
      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
        if (likely(__pyx_t_8)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
          __Pyx_INCREF(__pyx_t_8);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_1, function);
        }
      }
      __pyx_t_12 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11);
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7028, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_Ind = __pyx_t_12;
      __pyx_t_12 = 0;
+7029:             for ii in range(0,len(LSPoly)):
      __pyx_t_7 = PyObject_Length(__pyx_v_LSPoly); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7029, __pyx_L1_error)
      __pyx_t_10 = __pyx_t_7;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_10; __pyx_t_13+=1) {
        __pyx_v_ii = __pyx_t_13;
+7030:                 lslim = [LSLim[ii]] if not all([hasattr(ll,'__iter__')
        __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
/* … */
          __pyx_t_3 = __Pyx_HasAttr(__pyx_v_ll, __pyx_n_s_iter); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 7030, __pyx_L1_error)
          __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7030, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_11))) __PYX_ERR(0, 7030, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
/* … */
        __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_all, __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7030, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 7030, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (((!__pyx_t_3) != 0)) {
          __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7030, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7030, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_8);
          PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
          __pyx_t_8 = 0;
          __pyx_t_12 = __pyx_t_1;
          __pyx_t_1 = 0;
        } else {
+7031:                                                 for ll in LSLim[ii]]) \
        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7031, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (likely(PyList_CheckExact(__pyx_t_11)) || PyTuple_CheckExact(__pyx_t_11)) {
          __pyx_t_8 = __pyx_t_11; __Pyx_INCREF(__pyx_t_8); __pyx_t_9 = 0;
          __pyx_t_27 = NULL;
        } else {
          __pyx_t_9 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7031, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_27 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_27)) __PYX_ERR(0, 7031, __pyx_L1_error)
        }
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        for (;;) {
          if (likely(!__pyx_t_27)) {
            if (likely(PyList_CheckExact(__pyx_t_8))) {
              if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 7031, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7031, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            } else {
              if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_9); __Pyx_INCREF(__pyx_t_11); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 7031, __pyx_L1_error)
              #else
              __pyx_t_11 = PySequence_ITEM(__pyx_t_8, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7031, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_11);
              #endif
            }
          } else {
            __pyx_t_11 = __pyx_t_27(__pyx_t_8);
            if (unlikely(!__pyx_t_11)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                else __PYX_ERR(0, 7031, __pyx_L1_error)
              }
              break;
            }
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_XDECREF_SET(__pyx_v_ll, __pyx_t_11);
          __pyx_t_11 = 0;
/* … */
        }
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+7032:                                                     else LSLim[ii]
          __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_LSLim, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7032, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_12 = __pyx_t_1;
          __pyx_t_1 = 0;
        }
        __Pyx_XDECREF_SET(__pyx_v_lslim, __pyx_t_12);
        __pyx_t_12 = 0;
+7033:                 for jj in range(0,len(lslim)):
        __pyx_t_9 = PyObject_Length(__pyx_v_lslim); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 7033, __pyx_L1_error)
        __pyx_t_28 = __pyx_t_9;
        for (__pyx_t_29 = 0; __pyx_t_29 < __pyx_t_28; __pyx_t_29+=1) {
          __pyx_v_jj = __pyx_t_29;
+7034:                     pIn, pOut, \
          __Pyx_XDECREF_SET(__pyx_v_pIn, __pyx_t_12);
          __pyx_t_12 = 0;
          __Pyx_XDECREF_SET(__pyx_v_pOut, __pyx_t_8);
          __pyx_t_8 = 0;
          __Pyx_XDECREF_SET(__pyx_v_vperpIn, __pyx_t_11);
          __pyx_t_11 = 0;
          __Pyx_XDECREF_SET(__pyx_v_vperpOut, __pyx_t_6);
          __pyx_t_6 = 0;
          __Pyx_XDECREF_SET(__pyx_v_iIn, __pyx_t_15);
          __pyx_t_15 = 0;
          __Pyx_XDECREF_SET(__pyx_v_iOut, __pyx_t_2);
          __pyx_t_2 = 0;
 7035:                         vperpIn, vperpOut, \
+7036:                         iIn, iOut = Calc_LOS_PInOut_Lin(Ds, dus, LSPoly[ii],
          __pyx_t_19 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_Ds, PyBUF_WRITABLE); if (unlikely(!__pyx_t_19.memview)) __PYX_ERR(0, 7036, __pyx_L1_error)
          __pyx_t_18 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_v_dus, PyBUF_WRITABLE); if (unlikely(!__pyx_t_18.memview)) __PYX_ERR(0, 7036, __pyx_L1_error)
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_LSPoly, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7036, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_17 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_12, PyBUF_WRITABLE); if (unlikely(!__pyx_t_17.memview)) __PYX_ERR(0, 7036, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
/* … */
          __pyx_t_30.__pyx_n = 1;
          __pyx_t_30.EpsPlane = __pyx_t_20;
          __pyx_t_1 = __pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin(__pyx_t_19, __pyx_t_18, __pyx_t_17, __pyx_t_16, __pyx_t_12, &__pyx_t_30); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7036, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __PYX_XDEC_MEMVIEW(&__pyx_t_19, 1);
          __pyx_t_19.memview = NULL;
          __pyx_t_19.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_18, 1);
          __pyx_t_18.memview = NULL;
          __pyx_t_18.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_17, 1);
          __pyx_t_17.memview = NULL;
          __pyx_t_17.data = NULL;
          __PYX_XDEC_MEMVIEW(&__pyx_t_16, 1);
          __pyx_t_16.memview = NULL;
          __pyx_t_16.data = NULL;
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
            PyObject* sequence = __pyx_t_1;
            Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
            if (unlikely(size != 6)) {
              if (size > 6) __Pyx_RaiseTooManyValuesError(6);
              else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
              __PYX_ERR(0, 7034, __pyx_L1_error)
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            if (likely(PyTuple_CheckExact(sequence))) {
              __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
              __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
              __pyx_t_11 = PyTuple_GET_ITEM(sequence, 2); 
              __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
              __pyx_t_15 = PyTuple_GET_ITEM(sequence, 4); 
              __pyx_t_2 = PyTuple_GET_ITEM(sequence, 5); 
            } else {
              __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
              __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
              __pyx_t_11 = PyList_GET_ITEM(sequence, 2); 
              __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
              __pyx_t_15 = PyList_GET_ITEM(sequence, 4); 
              __pyx_t_2 = PyList_GET_ITEM(sequence, 5); 
            }
            __Pyx_INCREF(__pyx_t_12);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(__pyx_t_11);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_2);
            #else
            {
              Py_ssize_t i;
              PyObject** temps[6] = {&__pyx_t_12,&__pyx_t_8,&__pyx_t_11,&__pyx_t_6,&__pyx_t_15,&__pyx_t_2};
              for (i=0; i < 6; i++) {
                PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 7034, __pyx_L1_error)
                __Pyx_GOTREF(item);
                *(temps[i]) = item;
              }
            }
            #endif
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          } else {
            Py_ssize_t index = -1;
            PyObject** temps[6] = {&__pyx_t_12,&__pyx_t_8,&__pyx_t_11,&__pyx_t_6,&__pyx_t_15,&__pyx_t_2};
            __pyx_t_14 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7034, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_26 = Py_TYPE(__pyx_t_14)->tp_iternext;
            for (index=0; index < 6; index++) {
              PyObject* item = __pyx_t_26(__pyx_t_14); if (unlikely(!item)) goto __pyx_L72_unpacking_failed;
              __Pyx_GOTREF(item);
              *(temps[index]) = item;
            }
            if (__Pyx_IternextUnpackEndCheck(__pyx_t_26(__pyx_t_14), 6) < 0) __PYX_ERR(0, 7034, __pyx_L1_error)
            __pyx_t_26 = NULL;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            goto __pyx_L73_unpacking_done;
            __pyx_L72_unpacking_failed:;
            __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
            __pyx_t_26 = NULL;
            if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
            __PYX_ERR(0, 7034, __pyx_L1_error)
            __pyx_L73_unpacking_done:;
          }
+7037:                                                         LSVIn[ii], lslim[jj],
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_LSVIn, __pyx_v_ii, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(__pyx_t_12, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(0, 7037, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_lslim, __pyx_v_jj, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7037, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
+7038:                                                         EpsPlane=EpsPlane)
          __pyx_t_20 = __pyx_PyFloat_AsDouble(__pyx_v_EpsPlane); if (unlikely((__pyx_t_20 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7038, __pyx_L1_error)
+7039:                     kpin = np.sqrt(np.sum((Ds-pIn)**2,axis=0))
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sqrt); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_sum); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Subtract(__pyx_v_Ds, __pyx_v_pIn); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_11 = PyNumber_Power(__pyx_t_2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11);
          __pyx_t_11 = 0;
          __pyx_t_11 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          if (PyDict_SetItem(__pyx_t_11, __pyx_n_s_axis, __pyx_int_0) < 0) __PYX_ERR(0, 7039, __pyx_L1_error)
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_11)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_11);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          __pyx_t_1 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_11, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_8);
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7039, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF_SET(__pyx_v_kpin, __pyx_t_1);
          __pyx_t_1 = 0;
+7040:                     indNoNan = (~np.isnan(kpin)) & (~np.isnan(kPOut))
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_isnan); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_8))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_8, function);
            }
          }
          __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_15, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = PyNumber_Invert(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_np); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_isnan); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_15)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_15);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_15, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyNumber_Invert(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyNumber_And(__pyx_t_8, __pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7040, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indNoNan, __pyx_t_1);
          __pyx_t_1 = 0;
+7041:                     indout = np.zeros((NL,),dtype=bool)
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_INCREF(__pyx_v_NL);
          __Pyx_GIVEREF(__pyx_v_NL);
          PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_NL);
          __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1);
          __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, ((PyObject *)__pyx_ptype_7cpython_4bool_bool)) < 0) __PYX_ERR(0, 7041, __pyx_L1_error)
          __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7041, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_XDECREF_SET(__pyx_v_indout, __pyx_t_15);
          __pyx_t_15 = 0;
+7042:                     indout[indNoNan] = kpin[indNoNan]<kPOut[indNoNan]
          __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indNoNan); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7042, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_kPOut, __pyx_v_indNoNan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7042, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_8 = PyObject_RichCompare(__pyx_t_15, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7042, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_v_indNoNan, __pyx_t_8) < 0)) __PYX_ERR(0, 7042, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+7043:                     indout[(~np.isnan(kpin)) & np.isnan(kPOut)] = True
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_isnan); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_1, __pyx_v_kpin) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_v_kpin);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_15 = PyNumber_Invert(__pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_isnan); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_11, function);
            }
          }
          __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_1, __pyx_v_kPOut) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_v_kPOut);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_11 = PyNumber_And(__pyx_t_15, __pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(PyObject_SetItem(__pyx_v_indout, __pyx_t_11, Py_True) < 0)) __PYX_ERR(0, 7043, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+7044:                     if np.any(indout):
          __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7044, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_any); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7044, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __pyx_t_8 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
            __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15);
            if (likely(__pyx_t_8)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
              __Pyx_INCREF(__pyx_t_8);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_15, function);
            }
          }
          __pyx_t_11 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_8, __pyx_v_indout) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_v_indout);
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7044, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 7044, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          if (__pyx_t_3) {
/* … */
          }
        }
      }
+7045:                         kPOut[indout] = kpin[indout]
            __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_kpin, __pyx_v_indout); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7045, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            if (unlikely(PyObject_SetItem(__pyx_v_kPOut, __pyx_v_indout, __pyx_t_11) < 0)) __PYX_ERR(0, 7045, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+7046:                         POut[:,indout] = pIn[:,indout]
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_indout);
            __pyx_t_15 = __Pyx_PyObject_GetItem(__pyx_v_pIn, __pyx_t_11); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7046, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_POut, __pyx_t_11, __pyx_t_15) < 0)) __PYX_ERR(0, 7046, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+7047:                         VperpOut[:,indout] = vperpIn[:,indout]
            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7047, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_indout);
            __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_vperpIn, __pyx_t_15); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7047, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7047, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_slice__8);
            __Pyx_GIVEREF(__pyx_slice__8);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_slice__8);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_VperpOut, __pyx_t_15, __pyx_t_11) < 0)) __PYX_ERR(0, 7047, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+7048:                         IOut[2,indout] = iIn[indout]
            __pyx_t_11 = __Pyx_PyObject_GetItem(__pyx_v_iIn, __pyx_v_indout); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7048, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7048, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_int_2);
            __Pyx_GIVEREF(__pyx_int_2);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_int_2);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_15, __pyx_t_11) < 0)) __PYX_ERR(0, 7048, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+7049:                         IOut[0,indout] = 1+ii
            __pyx_t_11 = __Pyx_PyInt_From_long((1 + __pyx_v_ii)); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7049, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7049, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_int_0);
            __Pyx_GIVEREF(__pyx_int_0);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_int_0);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_15, __pyx_t_11) < 0)) __PYX_ERR(0, 7049, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+7050:                         IOut[1,indout] = jj
            __pyx_t_11 = __Pyx_PyInt_From_int(__pyx_v_jj); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_11);
            __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7050, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_15);
            __Pyx_INCREF(__pyx_int_1);
            __Pyx_GIVEREF(__pyx_int_1);
            PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_int_1);
            __Pyx_INCREF(__pyx_v_indout);
            __Pyx_GIVEREF(__pyx_v_indout);
            PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_v_indout);
            if (unlikely(PyObject_SetItem(__pyx_v_IOut, __pyx_t_15, __pyx_t_11) < 0)) __PYX_ERR(0, 7050, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
 7051: 
+7052:     if not v:
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_v); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 7052, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_3) != 0);
  if (__pyx_t_5) {
/* … */
  }
 7053:         PIn, POut, \
 7054:             kPIn, kPOut, \
 7055:             VperpIn, VperpOut, \
+7056:             IIn, IOut = PIn.flatten(), POut.flatten(), kPIn[0], kPOut[0], \
    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_PIn, __pyx_n_s_flatten); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_15);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_15, function);
      }
    }
    __pyx_t_11 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_15);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_POut, __pyx_n_s_flatten); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_15 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_kPIn, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_kPOut, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
+7057:                         VperpIn.flatten(), VperpOut.flatten(), IIn[0], \
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_VperpIn, __pyx_n_s_flatten); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
      }
    }
    __pyx_t_2 = (__pyx_t_12) ? __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_12) : __Pyx_PyObject_CallNoArg(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_VperpOut, __pyx_n_s_flatten); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_14 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) {
      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_12);
      if (likely(__pyx_t_14)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12);
        __Pyx_INCREF(__pyx_t_14);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_12, function);
      }
    }
    __pyx_t_6 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_12);
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __pyx_t_12 = __Pyx_GetItemInt(__pyx_v_IIn, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
+7058:                         IOut.flatten()
    __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_v_IOut, __pyx_n_s_flatten); if (unlikely(!__pyx_t_31)) __PYX_ERR(0, 7058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_31);
    __pyx_t_32 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_31))) {
      __pyx_t_32 = PyMethod_GET_SELF(__pyx_t_31);
      if (likely(__pyx_t_32)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_31);
        __Pyx_INCREF(__pyx_t_32);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_31, function);
      }
    }
    __pyx_t_14 = (__pyx_t_32) ? __Pyx_PyObject_CallOneArg(__pyx_t_31, __pyx_t_32) : __Pyx_PyObject_CallNoArg(__pyx_t_31);
    __Pyx_XDECREF(__pyx_t_32); __pyx_t_32 = 0;
    if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7058, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_31); __pyx_t_31 = 0;
    __Pyx_DECREF_SET(__pyx_v_PIn, __pyx_t_11);
    __pyx_t_11 = 0;
    __Pyx_DECREF_SET(__pyx_v_POut, __pyx_t_15);
    __pyx_t_15 = 0;
    __Pyx_DECREF_SET(__pyx_v_kPIn, __pyx_t_8);
    __pyx_t_8 = 0;
    __Pyx_DECREF_SET(__pyx_v_kPOut, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_VperpIn, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_VperpOut, __pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_DECREF_SET(__pyx_v_IIn, __pyx_t_12);
    __pyx_t_12 = 0;
    __Pyx_DECREF_SET(__pyx_v_IOut, __pyx_t_14);
    __pyx_t_14 = 0;
+7059:     return PIn, POut, kPIn, kPOut, VperpIn, VperpOut, IIn, IOut
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_14 = PyTuple_New(8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 7059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_INCREF(__pyx_v_PIn);
  __Pyx_GIVEREF(__pyx_v_PIn);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v_PIn);
  __Pyx_INCREF(__pyx_v_POut);
  __Pyx_GIVEREF(__pyx_v_POut);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_POut);
  __Pyx_INCREF(__pyx_v_kPIn);
  __Pyx_GIVEREF(__pyx_v_kPIn);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_kPIn);
  __Pyx_INCREF(__pyx_v_kPOut);
  __Pyx_GIVEREF(__pyx_v_kPOut);
  PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_v_kPOut);
  __Pyx_INCREF(__pyx_v_VperpIn);
  __Pyx_GIVEREF(__pyx_v_VperpIn);
  PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_v_VperpIn);
  __Pyx_INCREF(__pyx_v_VperpOut);
  __Pyx_GIVEREF(__pyx_v_VperpOut);
  PyTuple_SET_ITEM(__pyx_t_14, 5, __pyx_v_VperpOut);
  __Pyx_INCREF(__pyx_v_IIn);
  __Pyx_GIVEREF(__pyx_v_IIn);
  PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_v_IIn);
  __Pyx_INCREF(__pyx_v_IOut);
  __Pyx_GIVEREF(__pyx_v_IOut);
  PyTuple_SET_ITEM(__pyx_t_14, 7, __pyx_v_IOut);
  __pyx_r = __pyx_t_14;
  __pyx_t_14 = 0;
  goto __pyx_L0;
 7060: 
 7061: @cython.cdivision(True)
 7062: @cython.wraparound(False)
 7063: @cython.boundscheck(False)
+7064: cdef Calc_LOS_PInOut_Lin(double[:,::1] Ds, double [:,::1] us, double[:,::1] VPoly, double[:,::1] VIn, Lim, double EpsPlane=1.e-9):
static PyObject *__pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin(__Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, __Pyx_memviewslice __pyx_v_VPoly, __Pyx_memviewslice __pyx_v_VIn, PyObject *__pyx_v_Lim, struct __pyx_opt_args_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin *__pyx_optional_args) {
  double __pyx_v_EpsPlane = ((double)1.e-9);
  PyObject *__pyx_v_warn = NULL;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_Nl;
  int __pyx_v_Ns;
  double __pyx_v_kin;
  double __pyx_v_kout;
  double __pyx_v_scauVin;
  double __pyx_v_q;
  double __pyx_v_X;
  double __pyx_v_sca;
  double __pyx_v_L0;
  double __pyx_v_L1;
  int __pyx_v_indin;
  int __pyx_v_indout;
  int __pyx_v_Done;
  PyArrayObject *__pyx_v_SIn_ = 0;
  PyArrayObject *__pyx_v_SOut_ = 0;
  PyArrayObject *__pyx_v_VPerp_In = 0;
  PyArrayObject *__pyx_v_VPerp_Out = 0;
  PyArrayObject *__pyx_v_indIn_ = 0;
  PyArrayObject *__pyx_v_indOut_ = 0;
  __Pyx_memviewslice __pyx_v_SIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_SOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_VPerpIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_VPerpOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_V1 = NULL;
  PyObject *__pyx_v_V2 = NULL;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_SIn_;
  __Pyx_Buffer __pyx_pybuffer_SIn_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_SOut_;
  __Pyx_Buffer __pyx_pybuffer_SOut_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPerp_In;
  __Pyx_Buffer __pyx_pybuffer_VPerp_In;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPerp_Out;
  __Pyx_Buffer __pyx_pybuffer_VPerp_Out;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indIn_;
  __Pyx_Buffer __pyx_pybuffer_indIn_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indOut_;
  __Pyx_Buffer __pyx_pybuffer_indOut_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Calc_LOS_PInOut_Lin", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_EpsPlane = __pyx_optional_args->EpsPlane;
    }
  }
  __pyx_pybuffer_SIn_.pybuffer.buf = NULL;
  __pyx_pybuffer_SIn_.refcount = 0;
  __pyx_pybuffernd_SIn_.data = NULL;
  __pyx_pybuffernd_SIn_.rcbuffer = &__pyx_pybuffer_SIn_;
  __pyx_pybuffer_SOut_.pybuffer.buf = NULL;
  __pyx_pybuffer_SOut_.refcount = 0;
  __pyx_pybuffernd_SOut_.data = NULL;
  __pyx_pybuffernd_SOut_.rcbuffer = &__pyx_pybuffer_SOut_;
  __pyx_pybuffer_VPerp_In.pybuffer.buf = NULL;
  __pyx_pybuffer_VPerp_In.refcount = 0;
  __pyx_pybuffernd_VPerp_In.data = NULL;
  __pyx_pybuffernd_VPerp_In.rcbuffer = &__pyx_pybuffer_VPerp_In;
  __pyx_pybuffer_VPerp_Out.pybuffer.buf = NULL;
  __pyx_pybuffer_VPerp_Out.refcount = 0;
  __pyx_pybuffernd_VPerp_Out.data = NULL;
  __pyx_pybuffernd_VPerp_Out.rcbuffer = &__pyx_pybuffer_VPerp_Out;
  __pyx_pybuffer_indIn_.pybuffer.buf = NULL;
  __pyx_pybuffer_indIn_.refcount = 0;
  __pyx_pybuffernd_indIn_.data = NULL;
  __pyx_pybuffernd_indIn_.rcbuffer = &__pyx_pybuffer_indIn_;
  __pyx_pybuffer_indOut_.pybuffer.buf = NULL;
  __pyx_pybuffer_indOut_.refcount = 0;
  __pyx_pybuffernd_indOut_.data = NULL;
  __pyx_pybuffernd_indOut_.rcbuffer = &__pyx_pybuffer_indOut_;
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_11, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_80, 1);
  __Pyx_XDECREF(__pyx_t_191);
  __Pyx_XDECREF(__pyx_t_192);
  __Pyx_XDECREF(__pyx_t_193);
  __Pyx_XDECREF(__pyx_t_194);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Calc_LOS_PInOut_Lin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_SIn_);
  __Pyx_XDECREF((PyObject *)__pyx_v_SOut_);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPerp_In);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPerp_Out);
  __Pyx_XDECREF((PyObject *)__pyx_v_indIn_);
  __Pyx_XDECREF((PyObject *)__pyx_v_indOut_);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SOut, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPerpIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPerpOut, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indOut, 1);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_V1);
  __Pyx_XDECREF(__pyx_v_V2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Lin {
  int __pyx_n;
  double EpsPlane;
};
 7065: 
+7066:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7066, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7067:     warn("THIS IS THE OLD VERSION OF THIS FUNCTION, PLEASE USE THE NEW ONE",
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__131, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__131 = PyTuple_Pack(2, __pyx_kp_s_THIS_IS_THE_OLD_VERSION_OF_THIS, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(0, 7067, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__131);
  __Pyx_GIVEREF(__pyx_tuple__131);
+7068:          DeprecationWarning, stacklevel=2)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stacklevel, __pyx_int_2) < 0) __PYX_ERR(0, 7068, __pyx_L1_error)
 7069: 
+7070:     cdef int ii=0, jj=0, Nl=Ds.shape[1], Ns=VIn.shape[1]
  __pyx_v_ii = 0;
  __pyx_v_jj = 0;
  __pyx_v_Nl = (__pyx_v_Ds.shape[1]);
  __pyx_v_Ns = (__pyx_v_VIn.shape[1]);
+7071:     cdef double kin, kout, scauVin, q, X, sca, L0=<double>Lim[0], L1=<double>Lim[1]
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_L0 = ((double)__pyx_t_3);
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7071, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_L1 = ((double)__pyx_t_3);
+7072:     cdef int indin=0, indout=0, Done=0
  __pyx_v_indin = 0;
  __pyx_v_indout = 0;
  __pyx_v_Done = 0;
+7073:     cdef np.ndarray[double,ndim=2] SIn_=np.nan*np.ones((3,Nl)), SOut_=np.nan*np.ones((3,Nl))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7073, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_SIn_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7073, __pyx_L1_error)
    } else {__pyx_pybuffernd_SIn_.diminfo[0].strides = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_SIn_.diminfo[0].shape = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_SIn_.diminfo[1].strides = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_SIn_.diminfo[1].shape = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_SIn_ = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_6, function);
    }
  }
  __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_6, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7073, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_6);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_SOut_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7073, __pyx_L1_error)
    } else {__pyx_pybuffernd_SOut_.diminfo[0].strides = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_SOut_.diminfo[0].shape = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_SOut_.diminfo[1].strides = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_SOut_.diminfo[1].shape = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_SOut_ = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;
+7074:     cdef np.ndarray[double,ndim=2] VPerp_In=np.nan*np.ones((3,Nl)), VPerp_Out=np.nan*np.ones((3,Nl))
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_nan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_6 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7074, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_VPerp_In = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7074, __pyx_L1_error)
    } else {__pyx_pybuffernd_VPerp_In.diminfo[0].strides = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPerp_In.diminfo[0].shape = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPerp_In.diminfo[1].strides = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPerp_In.diminfo[1].shape = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_VPerp_In = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_nan); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7074, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_VPerp_Out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7074, __pyx_L1_error)
    } else {__pyx_pybuffernd_VPerp_Out.diminfo[0].strides = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPerp_Out.diminfo[0].shape = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPerp_Out.diminfo[1].strides = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPerp_Out.diminfo[1].shape = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_VPerp_Out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+7075:     cdef np.ndarray[double,ndim=1] indIn_=np.nan*np.ones((Nl,)), indOut_=np.nan*np.ones((Nl,))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7075, __pyx_L1_error)
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_indIn_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7075, __pyx_L1_error)
    } else {__pyx_pybuffernd_indIn_.diminfo[0].strides = __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indIn_.diminfo[0].shape = __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_9 = 0;
  __pyx_v_indIn_ = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7075, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7075, __pyx_L1_error)
  __pyx_t_9 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_indOut_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7075, __pyx_L1_error)
    } else {__pyx_pybuffernd_indOut_.diminfo[0].strides = __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indOut_.diminfo[0].shape = __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_9 = 0;
  __pyx_v_indOut_ = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
 7076: 
+7077:     cdef double[:,::1] SIn=SIn_, SOut=SOut_, VPerpIn=VPerp_In, VPerpOut=VPerp_Out
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_SIn_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7077, __pyx_L1_error)
  __pyx_v_SIn = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_SOut_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7077, __pyx_L1_error)
  __pyx_v_SOut = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPerp_In), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7077, __pyx_L1_error)
  __pyx_v_VPerpIn = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPerp_Out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7077, __pyx_L1_error)
  __pyx_v_VPerpOut = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+7078:     cdef double[::1] indIn=indIn_, indOut=indOut_
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_indIn_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __pyx_v_indIn = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
  __pyx_t_11 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_indOut_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_11.memview)) __PYX_ERR(0, 7078, __pyx_L1_error)
  __pyx_v_indOut = __pyx_t_11;
  __pyx_t_11.memview = NULL;
  __pyx_t_11.data = NULL;
 7079: 
+7080:     for ii in range(0,Nl):
  __pyx_t_12 = __pyx_v_Nl;
  __pyx_t_13 = __pyx_t_12;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_ii = __pyx_t_14;
+7081:         kout, kin, Done = 1.e12, 1e12, 0
    __pyx_t_3 = 1.e12;
    __pyx_t_15 = 1e12;
    __pyx_t_16 = 0;
    __pyx_v_kout = __pyx_t_3;
    __pyx_v_kin = __pyx_t_15;
    __pyx_v_Done = __pyx_t_16;
 7082:         # For cylinder
+7083:         for jj in range(0,Ns):
    __pyx_t_16 = __pyx_v_Ns;
    __pyx_t_17 = __pyx_t_16;
    for (__pyx_t_18 = 0; __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
      __pyx_v_jj = __pyx_t_18;
+7084:             scauVin = us[1,ii]*VIn[0,jj] + us[2,ii]*VIn[1,jj]
      __pyx_t_19 = 1;
      __pyx_t_20 = __pyx_v_ii;
      __pyx_t_21 = 0;
      __pyx_t_22 = __pyx_v_jj;
      __pyx_t_23 = 2;
      __pyx_t_24 = __pyx_v_ii;
      __pyx_t_25 = 1;
      __pyx_t_26 = __pyx_v_jj;
      __pyx_v_scauVin = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_19 * __pyx_v_us.strides[0]) )) + __pyx_t_20)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_21 * __pyx_v_VIn.strides[0]) )) + __pyx_t_22)) )))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_23 * __pyx_v_us.strides[0]) )) + __pyx_t_24)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_25 * __pyx_v_VIn.strides[0]) )) + __pyx_t_26)) )))));
 7085:             # Only if plane not parallel to line
+7086:             if Cabs(scauVin)>EpsPlane:
      __pyx_t_27 = ((fabs(__pyx_v_scauVin) > __pyx_v_EpsPlane) != 0);
      if (__pyx_t_27) {
/* … */
      }
    }
+7087:                 k = -((Ds[1,ii]-VPoly[0,jj])*VIn[0,jj] + (Ds[2,ii]-VPoly[1,jj])*VIn[1,jj])/scauVin
        __pyx_t_28 = 1;
        __pyx_t_29 = __pyx_v_ii;
        __pyx_t_30 = 0;
        __pyx_t_31 = __pyx_v_jj;
        __pyx_t_32 = 0;
        __pyx_t_33 = __pyx_v_jj;
        __pyx_t_34 = 2;
        __pyx_t_35 = __pyx_v_ii;
        __pyx_t_36 = 1;
        __pyx_t_37 = __pyx_v_jj;
        __pyx_t_38 = 1;
        __pyx_t_39 = __pyx_v_jj;
        __pyx_t_5 = PyFloat_FromDouble(((-((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_28 * __pyx_v_Ds.strides[0]) )) + __pyx_t_29)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_30 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_31)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_32 * __pyx_v_VIn.strides[0]) )) + __pyx_t_33)) )))) + (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_34 * __pyx_v_Ds.strides[0]) )) + __pyx_t_35)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_36 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_37)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_38 * __pyx_v_VIn.strides[0]) )) + __pyx_t_39)) )))))) / __pyx_v_scauVin)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7087, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
        __pyx_t_5 = 0;
 7088:                 # Only if on good side of semi-line
+7089:                 if k>=0.:
        __pyx_t_5 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7089, __pyx_L1_error)
        __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 7089, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (__pyx_t_27) {
/* … */
        }
+7090:                     V1, V2 = VPoly[0,jj+1]-VPoly[0,jj], VPoly[1,jj+1]-VPoly[1,jj]
          __pyx_t_40 = 0;
          __pyx_t_41 = (__pyx_v_jj + 1);
          __pyx_t_42 = 0;
          __pyx_t_43 = __pyx_v_jj;
          __pyx_t_5 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_40 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_41)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_42 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_43)) ))))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7090, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_44 = 1;
          __pyx_t_45 = (__pyx_v_jj + 1);
          __pyx_t_46 = 1;
          __pyx_t_47 = __pyx_v_jj;
          __pyx_t_1 = PyFloat_FromDouble(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_44 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_45)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_46 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_47)) ))))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7090, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_XDECREF_SET(__pyx_v_V1, __pyx_t_5);
          __pyx_t_5 = 0;
          __Pyx_XDECREF_SET(__pyx_v_V2, __pyx_t_1);
          __pyx_t_1 = 0;
+7091:                     q = ((Ds[1,ii] + k*us[1,ii]-VPoly[0,jj])*V1 + (Ds[2,ii] + k*us[2,ii]-VPoly[1,jj])*V2)/(V1**2+V2**2)
          __pyx_t_48 = 1;
          __pyx_t_49 = __pyx_v_ii;
          __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_48 * __pyx_v_Ds.strides[0]) )) + __pyx_t_49)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_50 = 1;
          __pyx_t_51 = __pyx_v_ii;
          __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_50 * __pyx_v_us.strides[0]) )) + __pyx_t_51)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = PyNumber_Multiply(__pyx_v_k, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_52 = 0;
          __pyx_t_53 = __pyx_v_jj;
          __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_52 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_53)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = PyNumber_Subtract(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_V1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_54 = 2;
          __pyx_t_55 = __pyx_v_ii;
          __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_54 * __pyx_v_Ds.strides[0]) )) + __pyx_t_55)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_56 = 2;
          __pyx_t_57 = __pyx_v_ii;
          __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_56 * __pyx_v_us.strides[0]) )) + __pyx_t_57)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = PyNumber_Multiply(__pyx_v_k, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_58 = 1;
          __pyx_t_59 = __pyx_v_jj;
          __pyx_t_6 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_58 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_59)) )))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_1 = PyNumber_Subtract(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_v_V2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_6 = PyNumber_Power(__pyx_v_V1, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_2 = PyNumber_Power(__pyx_v_V2, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7091, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_v_q = __pyx_t_15;
 7092:                     # Only of on the fraction of plane
+7093:                     if q>=0. and q<1.:
          __pyx_t_60 = ((__pyx_v_q >= 0.) != 0);
          if (__pyx_t_60) {
          } else {
            __pyx_t_27 = __pyx_t_60;
            goto __pyx_L10_bool_binop_done;
          }
          __pyx_t_60 = ((__pyx_v_q < 1.) != 0);
          __pyx_t_27 = __pyx_t_60;
          __pyx_L10_bool_binop_done:;
          if (__pyx_t_27) {
/* … */
          }
+7094:                         X = Ds[0,ii] + k*us[0,ii]
            __pyx_t_61 = 0;
            __pyx_t_62 = __pyx_v_ii;
            __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_61 * __pyx_v_Ds.strides[0]) )) + __pyx_t_62)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7094, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_63 = 0;
            __pyx_t_64 = __pyx_v_ii;
            __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_63 * __pyx_v_us.strides[0]) )) + __pyx_t_64)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7094, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __pyx_t_1 = PyNumber_Multiply(__pyx_v_k, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7094, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_1);
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_t_5 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7094, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_5);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
            __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_t_5); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7094, __pyx_L1_error)
            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
            __pyx_v_X = __pyx_t_15;
 7095:                         # Only if within limits
+7096:                         if X>=L0 and X<=L1:
            __pyx_t_60 = ((__pyx_v_X >= __pyx_v_L0) != 0);
            if (__pyx_t_60) {
            } else {
              __pyx_t_27 = __pyx_t_60;
              goto __pyx_L13_bool_binop_done;
            }
            __pyx_t_60 = ((__pyx_v_X <= __pyx_v_L1) != 0);
            __pyx_t_27 = __pyx_t_60;
            __pyx_L13_bool_binop_done:;
            if (__pyx_t_27) {
/* … */
            }
+7097:                             sca = us[1,ii]*VIn[0,jj] + us[2,ii]*VIn[1,jj]
              __pyx_t_65 = 1;
              __pyx_t_66 = __pyx_v_ii;
              __pyx_t_67 = 0;
              __pyx_t_68 = __pyx_v_jj;
              __pyx_t_69 = 2;
              __pyx_t_70 = __pyx_v_ii;
              __pyx_t_71 = 1;
              __pyx_t_72 = __pyx_v_jj;
              __pyx_v_sca = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_65 * __pyx_v_us.strides[0]) )) + __pyx_t_66)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_67 * __pyx_v_VIn.strides[0]) )) + __pyx_t_68)) )))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_69 * __pyx_v_us.strides[0]) )) + __pyx_t_70)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_71 * __pyx_v_VIn.strides[0]) )) + __pyx_t_72)) )))));
 7098:                             # Only if new
+7099:                             if sca<=0 and k<kout:
              __pyx_t_60 = ((__pyx_v_sca <= 0.0) != 0);
              if (__pyx_t_60) {
              } else {
                __pyx_t_27 = __pyx_t_60;
                goto __pyx_L16_bool_binop_done;
              }
              __pyx_t_5 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7099, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __pyx_t_1 = PyObject_RichCompare(__pyx_v_k, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7099, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7099, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_27 = __pyx_t_60;
              __pyx_L16_bool_binop_done:;
              if (__pyx_t_27) {
/* … */
                goto __pyx_L15;
              }
+7100:                                 kout = k
                __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7100, __pyx_L1_error)
                __pyx_v_kout = __pyx_t_15;
+7101:                                 indout = jj
                __pyx_v_indout = __pyx_v_jj;
+7102:                                 Done = 1
                __pyx_v_Done = 1;
+7103:                             elif sca>=0 and k<min(kin,kout):
              __pyx_t_60 = ((__pyx_v_sca >= 0.0) != 0);
              if (__pyx_t_60) {
              } else {
                __pyx_t_27 = __pyx_t_60;
                goto __pyx_L18_bool_binop_done;
              }
              __pyx_t_15 = __pyx_v_kout;
              __pyx_t_3 = __pyx_v_kin;
              if (((__pyx_t_15 < __pyx_t_3) != 0)) {
                __pyx_t_73 = __pyx_t_15;
              } else {
                __pyx_t_73 = __pyx_t_3;
              }
              __pyx_t_1 = PyFloat_FromDouble(__pyx_t_73); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7103, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_1);
              __pyx_t_5 = PyObject_RichCompare(__pyx_v_k, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7103, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
              __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7103, __pyx_L1_error)
              __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
              __pyx_t_27 = __pyx_t_60;
              __pyx_L18_bool_binop_done:;
              if (__pyx_t_27) {
/* … */
              }
              __pyx_L15:;
+7104:                                 kin = k
                __pyx_t_73 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_73 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7104, __pyx_L1_error)
                __pyx_v_kin = __pyx_t_73;
+7105:                                 indin = jj
                __pyx_v_indin = __pyx_v_jj;
 7106:         # For two faces
 7107:         # Only if plane not parallel to line
+7108:         if Cabs(us[0,ii])>EpsPlane:
    __pyx_t_74 = 0;
    __pyx_t_75 = __pyx_v_ii;
    __pyx_t_27 = ((fabs((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_74 * __pyx_v_us.strides[0]) )) + __pyx_t_75)) )))) > __pyx_v_EpsPlane) != 0);
    if (__pyx_t_27) {
/* … */
    }
 7109:             # First face
+7110:             k = -(Ds[0,ii]-L0)/us[0,ii]
      __pyx_t_76 = 0;
      __pyx_t_77 = __pyx_v_ii;
      __pyx_t_78 = 0;
      __pyx_t_79 = __pyx_v_ii;
      __pyx_t_5 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_76 * __pyx_v_Ds.strides[0]) )) + __pyx_t_77)) ))) - __pyx_v_L0)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_78 * __pyx_v_us.strides[0]) )) + __pyx_t_79)) ))))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7110, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
      __pyx_t_5 = 0;
 7111:             # Only if on good side of semi-line
+7112:             if k>=0.:
      __pyx_t_5 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7112, __pyx_L1_error)
      __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 7112, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (__pyx_t_27) {
/* … */
      }
 7113:                 # Only if inside VPoly
+7114:                 if Path(VPoly.T).contains_point([Ds[1,ii]+k*us[1,ii],Ds[2,ii]+k*us[2,ii]], transform=None, radius=0.0):
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_80 = __pyx_v_VPoly;
        __PYX_INC_MEMVIEW(&__pyx_t_80, 1);
        if (unlikely(__pyx_memslice_transpose(&__pyx_t_80) == 0)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_80, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __PYX_XDEC_MEMVIEW(&__pyx_t_80, 1);
        __pyx_t_80.memview = NULL;
        __pyx_t_80.data = NULL;
        __pyx_t_6 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
          __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
          if (likely(__pyx_t_6)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
            __Pyx_INCREF(__pyx_t_6);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_1, function);
          }
        }
        __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_contains_point); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_81 = 1;
        __pyx_t_82 = __pyx_v_ii;
        __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_81 * __pyx_v_Ds.strides[0]) )) + __pyx_t_82)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_83 = 1;
        __pyx_t_84 = __pyx_v_ii;
        __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_83 * __pyx_v_us.strides[0]) )) + __pyx_t_84)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyNumber_Multiply(__pyx_v_k, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_85 = 2;
        __pyx_t_86 = __pyx_v_ii;
        __pyx_t_6 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_85 * __pyx_v_Ds.strides[0]) )) + __pyx_t_86)) )))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_87 = 2;
        __pyx_t_88 = __pyx_v_ii;
        __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_87 * __pyx_v_us.strides[0]) )) + __pyx_t_88)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = PyNumber_Multiply(__pyx_v_k, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Add(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = PyList_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_2);
        PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_5);
        PyList_SET_ITEM(__pyx_t_4, 1, __pyx_t_5);
        __pyx_t_2 = 0;
        __pyx_t_5 = 0;
        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_4);
        PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
        __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 7114, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 7114, __pyx_L1_error)
        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 7114, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        if (__pyx_t_27) {
/* … */
        }
+7115:                     if us[0,ii]<=0 and k<kout:
          __pyx_t_89 = 0;
          __pyx_t_90 = __pyx_v_ii;
          __pyx_t_60 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_89 * __pyx_v_us.strides[0]) )) + __pyx_t_90)) ))) <= 0.0) != 0);
          if (__pyx_t_60) {
          } else {
            __pyx_t_27 = __pyx_t_60;
            goto __pyx_L24_bool_binop_done;
          }
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7115, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = PyObject_RichCompare(__pyx_v_k, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7115, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7115, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_27 = __pyx_t_60;
          __pyx_L24_bool_binop_done:;
          if (__pyx_t_27) {
/* … */
            goto __pyx_L23;
          }
+7116:                         kout = k
            __pyx_t_73 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_73 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7116, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_73;
+7117:                         indout = -1
            __pyx_v_indout = -1;
+7118:                         Done = 1
            __pyx_v_Done = 1;
+7119:                     elif us[0,ii]>=0 and k<min(kin,kout):
          __pyx_t_91 = 0;
          __pyx_t_92 = __pyx_v_ii;
          __pyx_t_60 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_91 * __pyx_v_us.strides[0]) )) + __pyx_t_92)) ))) >= 0.0) != 0);
          if (__pyx_t_60) {
          } else {
            __pyx_t_27 = __pyx_t_60;
            goto __pyx_L26_bool_binop_done;
          }
          __pyx_t_73 = __pyx_v_kout;
          __pyx_t_15 = __pyx_v_kin;
          if (((__pyx_t_73 < __pyx_t_15) != 0)) {
            __pyx_t_3 = __pyx_t_73;
          } else {
            __pyx_t_3 = __pyx_t_15;
          }
          __pyx_t_4 = PyFloat_FromDouble(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7119, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = PyObject_RichCompare(__pyx_v_k, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7119, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7119, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __pyx_t_27 = __pyx_t_60;
          __pyx_L26_bool_binop_done:;
          if (__pyx_t_27) {
/* … */
          }
          __pyx_L23:;
+7120:                         kin = k
            __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7120, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_3;
+7121:                         indin = -1
            __pyx_v_indin = -1;
 7122:             # Second face
+7123:             k = -(Ds[0,ii]-L1)/us[0,ii]
      __pyx_t_93 = 0;
      __pyx_t_94 = __pyx_v_ii;
      __pyx_t_95 = 0;
      __pyx_t_96 = __pyx_v_ii;
      __pyx_t_2 = PyFloat_FromDouble(((-((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_93 * __pyx_v_Ds.strides[0]) )) + __pyx_t_94)) ))) - __pyx_v_L1)) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_95 * __pyx_v_us.strides[0]) )) + __pyx_t_96)) ))))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7123, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_k, __pyx_t_2);
      __pyx_t_2 = 0;
 7124:             # Only if on good side of semi-line
+7125:             if k>=0.:
      __pyx_t_2 = PyObject_RichCompare(__pyx_v_k, __pyx_float_0_, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7125, __pyx_L1_error)
      __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 7125, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (__pyx_t_27) {
/* … */
      }
 7126:                 # Only if inside VPoly
+7127:                 if Path(VPoly.T).contains_point([Ds[1,ii]+k*us[1,ii],Ds[2,ii]+k*us[2,ii]], transform=None, radius=0.0):
        __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_80 = __pyx_v_VPoly;
        __PYX_INC_MEMVIEW(&__pyx_t_80, 1);
        if (unlikely(__pyx_memslice_transpose(&__pyx_t_80) == 0)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_80, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __PYX_XDEC_MEMVIEW(&__pyx_t_80, 1);
        __pyx_t_80.memview = NULL;
        __pyx_t_80.data = NULL;
        __pyx_t_1 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_4, function);
          }
        }
        __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_contains_point); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_97 = 1;
        __pyx_t_98 = __pyx_v_ii;
        __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_97 * __pyx_v_Ds.strides[0]) )) + __pyx_t_98)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_99 = 1;
        __pyx_t_100 = __pyx_v_ii;
        __pyx_t_5 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_99 * __pyx_v_us.strides[0]) )) + __pyx_t_100)) )))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_1 = PyNumber_Multiply(__pyx_v_k, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_5 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_101 = 2;
        __pyx_t_102 = __pyx_v_ii;
        __pyx_t_1 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_101 * __pyx_v_Ds.strides[0]) )) + __pyx_t_102)) )))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_103 = 2;
        __pyx_t_104 = __pyx_v_ii;
        __pyx_t_2 = PyFloat_FromDouble((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_103 * __pyx_v_us.strides[0]) )) + __pyx_t_104)) )))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = PyNumber_Multiply(__pyx_v_k, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_6 = PyList_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GIVEREF(__pyx_t_5);
        PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
        __Pyx_GIVEREF(__pyx_t_2);
        PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_2);
        __pyx_t_5 = 0;
        __pyx_t_2 = 0;
        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GIVEREF(__pyx_t_6);
        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
        __pyx_t_6 = 0;
        __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 7127, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 7127, __pyx_L1_error)
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_27 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_27 < 0)) __PYX_ERR(0, 7127, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (__pyx_t_27) {
/* … */
        }
+7128:                     if us[0,ii]>=0 and k<kout:
          __pyx_t_105 = 0;
          __pyx_t_106 = __pyx_v_ii;
          __pyx_t_60 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_105 * __pyx_v_us.strides[0]) )) + __pyx_t_106)) ))) >= 0.0) != 0);
          if (__pyx_t_60) {
          } else {
            __pyx_t_27 = __pyx_t_60;
            goto __pyx_L31_bool_binop_done;
          }
          __pyx_t_5 = PyFloat_FromDouble(__pyx_v_kout); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7128, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_6 = PyObject_RichCompare(__pyx_v_k, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7128, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7128, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_27 = __pyx_t_60;
          __pyx_L31_bool_binop_done:;
          if (__pyx_t_27) {
/* … */
            goto __pyx_L30;
          }
+7129:                         kout = k
            __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_3 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7129, __pyx_L1_error)
            __pyx_v_kout = __pyx_t_3;
+7130:                         indout = -2
            __pyx_v_indout = -2;
+7131:                         Done = 1
            __pyx_v_Done = 1;
+7132:                     elif us[0,ii]<=0 and k<min(kin,kout):
          __pyx_t_107 = 0;
          __pyx_t_108 = __pyx_v_ii;
          __pyx_t_60 = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_107 * __pyx_v_us.strides[0]) )) + __pyx_t_108)) ))) <= 0.0) != 0);
          if (__pyx_t_60) {
          } else {
            __pyx_t_27 = __pyx_t_60;
            goto __pyx_L33_bool_binop_done;
          }
          __pyx_t_3 = __pyx_v_kout;
          __pyx_t_73 = __pyx_v_kin;
          if (((__pyx_t_3 < __pyx_t_73) != 0)) {
            __pyx_t_15 = __pyx_t_3;
          } else {
            __pyx_t_15 = __pyx_t_73;
          }
          __pyx_t_6 = PyFloat_FromDouble(__pyx_t_15); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7132, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_5 = PyObject_RichCompare(__pyx_v_k, __pyx_t_6, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7132, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_60 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_60 < 0)) __PYX_ERR(0, 7132, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __pyx_t_27 = __pyx_t_60;
          __pyx_L33_bool_binop_done:;
          if (__pyx_t_27) {
/* … */
          }
          __pyx_L30:;
+7133:                         kin = k
            __pyx_t_15 = __pyx_PyFloat_AsDouble(__pyx_v_k); if (unlikely((__pyx_t_15 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7133, __pyx_L1_error)
            __pyx_v_kin = __pyx_t_15;
+7134:                         indin = -2
            __pyx_v_indin = -2;
 7135: 
+7136:         if Done==1:
    __pyx_t_27 = ((__pyx_v_Done == 1) != 0);
    if (__pyx_t_27) {
/* … */
    }
  }
+7137:             SOut[0,ii] = Ds[0,ii] + kout*us[0,ii]
      __pyx_t_109 = 0;
      __pyx_t_110 = __pyx_v_ii;
      __pyx_t_111 = 0;
      __pyx_t_112 = __pyx_v_ii;
      __pyx_t_113 = 0;
      __pyx_t_114 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_113 * __pyx_v_SOut.strides[0]) )) + __pyx_t_114)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_109 * __pyx_v_Ds.strides[0]) )) + __pyx_t_110)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_111 * __pyx_v_us.strides[0]) )) + __pyx_t_112)) )))));
+7138:             SOut[1,ii] = Ds[1,ii] + kout*us[1,ii]
      __pyx_t_115 = 1;
      __pyx_t_116 = __pyx_v_ii;
      __pyx_t_117 = 1;
      __pyx_t_118 = __pyx_v_ii;
      __pyx_t_119 = 1;
      __pyx_t_120 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_119 * __pyx_v_SOut.strides[0]) )) + __pyx_t_120)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_115 * __pyx_v_Ds.strides[0]) )) + __pyx_t_116)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_117 * __pyx_v_us.strides[0]) )) + __pyx_t_118)) )))));
+7139:             SOut[2,ii] = Ds[2,ii] + kout*us[2,ii]
      __pyx_t_121 = 2;
      __pyx_t_122 = __pyx_v_ii;
      __pyx_t_123 = 2;
      __pyx_t_124 = __pyx_v_ii;
      __pyx_t_125 = 2;
      __pyx_t_126 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_125 * __pyx_v_SOut.strides[0]) )) + __pyx_t_126)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_121 * __pyx_v_Ds.strides[0]) )) + __pyx_t_122)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_123 * __pyx_v_us.strides[0]) )) + __pyx_t_124)) )))));
 7140:             # To be finished
 7141:             # phi = Catan2(SOut[1,ii],SOut[0,ii])
+7142:             if indout==-1:
      switch (__pyx_v_indout) {
        case -1L:
/* … */
        break;
        case -2L:
+7143:                 VPerpOut[0,ii] = 1.
        __pyx_t_127 = 0;
        __pyx_t_128 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_127 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_128)) )) = 1.;
+7144:                 VPerpOut[1,ii] = 0.
        __pyx_t_129 = 1;
        __pyx_t_130 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_129 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_130)) )) = 0.;
+7145:                 VPerpOut[2,ii] = 0.
        __pyx_t_131 = 2;
        __pyx_t_132 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_131 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_132)) )) = 0.;
+7146:             elif indout==-2:
        break;
        default:
+7147:                 VPerpOut[0,ii] = -1.
        __pyx_t_133 = 0;
        __pyx_t_134 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_133 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_134)) )) = -1.;
+7148:                 VPerpOut[1,ii] = 0.
        __pyx_t_135 = 1;
        __pyx_t_136 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_135 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_136)) )) = 0.;
+7149:                 VPerpOut[2,ii] = 0.
        __pyx_t_137 = 2;
        __pyx_t_138 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_137 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_138)) )) = 0.;
 7150:             else:
+7151:                 VPerpOut[0,ii] = 0.
        __pyx_t_139 = 0;
        __pyx_t_140 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_139 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_140)) )) = 0.;
+7152:                 VPerpOut[1,ii] = VIn[0,indout]
        __pyx_t_141 = 0;
        __pyx_t_142 = __pyx_v_indout;
        __pyx_t_143 = 1;
        __pyx_t_144 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_143 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_144)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_141 * __pyx_v_VIn.strides[0]) )) + __pyx_t_142)) )));
+7153:                 VPerpOut[2,ii] = VIn[1,indout]
        __pyx_t_145 = 1;
        __pyx_t_146 = __pyx_v_indout;
        __pyx_t_147 = 2;
        __pyx_t_148 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_147 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_148)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_145 * __pyx_v_VIn.strides[0]) )) + __pyx_t_146)) )));
        break;
      }
+7154:             indOut[ii] = indout
      __pyx_t_149 = __pyx_v_ii;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_indOut.data) + __pyx_t_149)) )) = __pyx_v_indout;
+7155:             if kin<kout:
      __pyx_t_27 = ((__pyx_v_kin < __pyx_v_kout) != 0);
      if (__pyx_t_27) {
/* … */
      }
+7156:                 SIn[0,ii] = Ds[0,ii] + kin*us[0,ii]
        __pyx_t_150 = 0;
        __pyx_t_151 = __pyx_v_ii;
        __pyx_t_152 = 0;
        __pyx_t_153 = __pyx_v_ii;
        __pyx_t_154 = 0;
        __pyx_t_155 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_154 * __pyx_v_SIn.strides[0]) )) + __pyx_t_155)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_150 * __pyx_v_Ds.strides[0]) )) + __pyx_t_151)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_152 * __pyx_v_us.strides[0]) )) + __pyx_t_153)) )))));
+7157:                 SIn[1,ii] = Ds[1,ii] + kin*us[1,ii]
        __pyx_t_156 = 1;
        __pyx_t_157 = __pyx_v_ii;
        __pyx_t_158 = 1;
        __pyx_t_159 = __pyx_v_ii;
        __pyx_t_160 = 1;
        __pyx_t_161 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_160 * __pyx_v_SIn.strides[0]) )) + __pyx_t_161)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_156 * __pyx_v_Ds.strides[0]) )) + __pyx_t_157)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_158 * __pyx_v_us.strides[0]) )) + __pyx_t_159)) )))));
+7158:                 SIn[2,ii] = Ds[2,ii] + kin*us[2,ii]
        __pyx_t_162 = 2;
        __pyx_t_163 = __pyx_v_ii;
        __pyx_t_164 = 2;
        __pyx_t_165 = __pyx_v_ii;
        __pyx_t_166 = 2;
        __pyx_t_167 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_166 * __pyx_v_SIn.strides[0]) )) + __pyx_t_167)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_162 * __pyx_v_Ds.strides[0]) )) + __pyx_t_163)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_164 * __pyx_v_us.strides[0]) )) + __pyx_t_165)) )))));
+7159:                 if indin==-1:
        switch (__pyx_v_indin) {
          case -1L:
/* … */
          break;
          case -2L:
+7160:                     VPerpIn[0,ii] = -1.
          __pyx_t_168 = 0;
          __pyx_t_169 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_168 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_169)) )) = -1.;
+7161:                     VPerpIn[1,ii] = 0.
          __pyx_t_170 = 1;
          __pyx_t_171 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_170 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_171)) )) = 0.;
+7162:                     VPerpIn[2,ii] = 0.
          __pyx_t_172 = 2;
          __pyx_t_173 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_172 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_173)) )) = 0.;
+7163:                 elif indin==-2:
          break;
          default:
+7164:                     VPerpIn[0,ii] = 1.
          __pyx_t_174 = 0;
          __pyx_t_175 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_174 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_175)) )) = 1.;
+7165:                     VPerpIn[1,ii] = 0.
          __pyx_t_176 = 1;
          __pyx_t_177 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_176 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_177)) )) = 0.;
+7166:                     VPerpIn[2,ii] = 0.
          __pyx_t_178 = 2;
          __pyx_t_179 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_178 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_179)) )) = 0.;
 7167:                 else:
+7168:                     VPerpIn[0,ii] = 0.
          __pyx_t_180 = 0;
          __pyx_t_181 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_180 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_181)) )) = 0.;
+7169:                     VPerpIn[1,ii] = -VIn[0,indin]
          __pyx_t_182 = 0;
          __pyx_t_183 = __pyx_v_indin;
          __pyx_t_184 = 1;
          __pyx_t_185 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_184 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_185)) )) = (-(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_182 * __pyx_v_VIn.strides[0]) )) + __pyx_t_183)) ))));
+7170:                     VPerpIn[2,ii] = -VIn[1,indin]
          __pyx_t_186 = 1;
          __pyx_t_187 = __pyx_v_indin;
          __pyx_t_188 = 2;
          __pyx_t_189 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_188 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_189)) )) = (-(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VIn.data + __pyx_t_186 * __pyx_v_VIn.strides[0]) )) + __pyx_t_187)) ))));
          break;
        }
+7171:                 indIn[ii] = indin
        __pyx_t_190 = __pyx_v_ii;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_indIn.data) + __pyx_t_190)) )) = __pyx_v_indin;
 7172: 
+7173:     return np.asarray(SIn), np.asarray(SOut), np.asarray(VPerpIn), np.asarray(VPerpOut), np.asarray(indIn), np.asarray(indOut)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_SIn, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_5 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_SOut, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_1, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_VPerpIn, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_191 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_191 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_191)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_191);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_191) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_191, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_191); __pyx_t_191 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_191 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_191)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_191);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_VPerpOut, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_192 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_191))) {
    __pyx_t_192 = PyMethod_GET_SELF(__pyx_t_191);
    if (likely(__pyx_t_192)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_191);
      __Pyx_INCREF(__pyx_t_192);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_191, function);
    }
  }
  __pyx_t_1 = (__pyx_t_192) ? __Pyx_PyObject_Call2Args(__pyx_t_191, __pyx_t_192, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_191, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_192); __pyx_t_192 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_191); __pyx_t_191 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_192 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_192)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_192);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_indIn, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_193 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_192))) {
    __pyx_t_193 = PyMethod_GET_SELF(__pyx_t_192);
    if (likely(__pyx_t_193)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_192);
      __Pyx_INCREF(__pyx_t_193);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_192, function);
    }
  }
  __pyx_t_191 = (__pyx_t_193) ? __Pyx_PyObject_Call2Args(__pyx_t_192, __pyx_t_193, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_192, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_193); __pyx_t_193 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_191)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_191);
  __Pyx_DECREF(__pyx_t_192); __pyx_t_192 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_np); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_193 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_asarray); if (unlikely(!__pyx_t_193)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_193);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __pyx_memoryview_fromslice(__pyx_v_indOut, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_194 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_193))) {
    __pyx_t_194 = PyMethod_GET_SELF(__pyx_t_193);
    if (likely(__pyx_t_194)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_193);
      __Pyx_INCREF(__pyx_t_194);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_193, function);
    }
  }
  __pyx_t_192 = (__pyx_t_194) ? __Pyx_PyObject_Call2Args(__pyx_t_193, __pyx_t_194, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_193, __pyx_t_6);
  __Pyx_XDECREF(__pyx_t_194); __pyx_t_194 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_192)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_192);
  __Pyx_DECREF(__pyx_t_193); __pyx_t_193 = 0;
  __pyx_t_193 = PyTuple_New(6); if (unlikely(!__pyx_t_193)) __PYX_ERR(0, 7173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_193);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_193, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_193, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_193, 2, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_193, 3, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_191);
  PyTuple_SET_ITEM(__pyx_t_193, 4, __pyx_t_191);
  __Pyx_GIVEREF(__pyx_t_192);
  PyTuple_SET_ITEM(__pyx_t_193, 5, __pyx_t_192);
  __pyx_t_5 = 0;
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_191 = 0;
  __pyx_t_192 = 0;
  __pyx_r = __pyx_t_193;
  __pyx_t_193 = 0;
  goto __pyx_L0;
 7174: 
 7175: @cython.cdivision(True)
 7176: @cython.wraparound(False)
 7177: @cython.boundscheck(False)
+7178: cdef Calc_LOS_PInOut_Tor(double [:,::1] Ds, double [:,::1] us, double [:,::1] VPoly, double [:,::1] vIn, Lim=None,
static PyObject *__pyx_f_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor(__Pyx_memviewslice __pyx_v_Ds, __Pyx_memviewslice __pyx_v_us, __Pyx_memviewslice __pyx_v_VPoly, __Pyx_memviewslice __pyx_v_vIn, struct __pyx_opt_args_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor *__pyx_optional_args) {
  PyObject *__pyx_v_Lim = ((PyObject *)Py_None);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __PYX_XDEC_MEMVIEW(&__pyx_t_280, 1);
  __Pyx_XDECREF(__pyx_t_407);
  { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer);
    __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer);
  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
  __Pyx_AddTraceback("tofu.geom._GG03.Calc_LOS_PInOut_Tor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  goto __pyx_L2;
  __pyx_L0:;
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer);
  __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer);
  __pyx_L2:;
  __Pyx_XDECREF(__pyx_v_warn);
  __Pyx_XDECREF((PyObject *)__pyx_v_SIn_);
  __Pyx_XDECREF((PyObject *)__pyx_v_SOut_);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPerp_In);
  __Pyx_XDECREF((PyObject *)__pyx_v_VPerp_Out);
  __Pyx_XDECREF((PyObject *)__pyx_v_indIn_);
  __Pyx_XDECREF((PyObject *)__pyx_v_indOut_);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_SOut, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPerpIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_VPerpOut, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indIn, 1);
  __PYX_XDEC_MEMVIEW(&__pyx_v_indOut, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
struct __pyx_opt_args_4tofu_4geom_5_GG03_Calc_LOS_PInOut_Tor {
  int __pyx_n;
  PyObject *Lim;
  PyBoolObject *Forbid;
  PyObject *RMin;
  double EpsUz;
  double EpsVz;
  double EpsA;
  double EpsB;
  double EpsPlane;
};
+7179:                          bool Forbid=True, RMin=None, double EpsUz=1.e-6, double EpsVz=1.e-9, double EpsA=1.e-9, double EpsB=1.e-9, double EpsPlane=1.e-9):
  PyBoolObject *__pyx_v_Forbid = ((PyBoolObject *)Py_True);
  PyObject *__pyx_v_RMin = ((PyObject *)Py_None);
  double __pyx_v_EpsUz = ((double)1.e-6);
  double __pyx_v_EpsVz = ((double)1.e-9);
  double __pyx_v_EpsA = ((double)1.e-9);
  double __pyx_v_EpsB = ((double)1.e-9);
  double __pyx_v_EpsPlane = ((double)1.e-9);
  PyObject *__pyx_v_warn = NULL;
  int __pyx_v_ii;
  int __pyx_v_jj;
  int __pyx_v_Nl;
  int __pyx_v_Ns;
  double __pyx_v_Rmin;
  double __pyx_v_upscaDp;
  double __pyx_v_upar2;
  double __pyx_v_Dpar2;
  double __pyx_v_Crit2;
  double __pyx_v_kout;
  double __pyx_v_kin;
  int __pyx_v_indin;
  int __pyx_v_indout;
  int __pyx_v_Done;
  double __pyx_v_L;
  double __pyx_v_S1X;
  double __pyx_v_S1Y;
  double __pyx_v_S2X;
  double __pyx_v_S2Y;
  double __pyx_v_sca;
  double __pyx_v_sca0;
  double __pyx_v_sca1;
  double __pyx_v_sca2;
  double __pyx_v_q;
  double __pyx_v_C;
  double __pyx_v_delta;
  double __pyx_v_sqd;
  double __pyx_v_k;
  double __pyx_v_sol0;
  double __pyx_v_sol1;
  double __pyx_v_phi;
  double __pyx_v_L0;
  double __pyx_v_L1;
  double __pyx_v_v0;
  double __pyx_v_v1;
  double __pyx_v_A;
  double __pyx_v_B;
  double __pyx_v_ephiIn0;
  double __pyx_v_ephiIn1;
  int __pyx_v_Forbidbis;
  int __pyx_v_Forbid0;
  PyArrayObject *__pyx_v_SIn_ = 0;
  PyArrayObject *__pyx_v_SOut_ = 0;
  PyArrayObject *__pyx_v_VPerp_In = 0;
  PyArrayObject *__pyx_v_VPerp_Out = 0;
  PyArrayObject *__pyx_v_indIn_ = 0;
  PyArrayObject *__pyx_v_indOut_ = 0;
  __Pyx_memviewslice __pyx_v_SIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_SOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_VPerpIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_VPerpOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indIn = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_memviewslice __pyx_v_indOut = { 0, 0, { 0 }, { 0 }, { 0 } };
  __Pyx_LocalBuf_ND __pyx_pybuffernd_SIn_;
  __Pyx_Buffer __pyx_pybuffer_SIn_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_SOut_;
  __Pyx_Buffer __pyx_pybuffer_SOut_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPerp_In;
  __Pyx_Buffer __pyx_pybuffer_VPerp_In;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_VPerp_Out;
  __Pyx_Buffer __pyx_pybuffer_VPerp_Out;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indIn_;
  __Pyx_Buffer __pyx_pybuffer_indIn_;
  __Pyx_LocalBuf_ND __pyx_pybuffernd_indOut_;
  __Pyx_Buffer __pyx_pybuffer_indOut_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Calc_LOS_PInOut_Tor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_Lim = __pyx_optional_args->Lim;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_Forbid = __pyx_optional_args->Forbid;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_RMin = __pyx_optional_args->RMin;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_EpsUz = __pyx_optional_args->EpsUz;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_EpsVz = __pyx_optional_args->EpsVz;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_EpsA = __pyx_optional_args->EpsA;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_EpsB = __pyx_optional_args->EpsB;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_EpsPlane = __pyx_optional_args->EpsPlane;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __pyx_pybuffer_SIn_.pybuffer.buf = NULL;
  __pyx_pybuffer_SIn_.refcount = 0;
  __pyx_pybuffernd_SIn_.data = NULL;
  __pyx_pybuffernd_SIn_.rcbuffer = &__pyx_pybuffer_SIn_;
  __pyx_pybuffer_SOut_.pybuffer.buf = NULL;
  __pyx_pybuffer_SOut_.refcount = 0;
  __pyx_pybuffernd_SOut_.data = NULL;
  __pyx_pybuffernd_SOut_.rcbuffer = &__pyx_pybuffer_SOut_;
  __pyx_pybuffer_VPerp_In.pybuffer.buf = NULL;
  __pyx_pybuffer_VPerp_In.refcount = 0;
  __pyx_pybuffernd_VPerp_In.data = NULL;
  __pyx_pybuffernd_VPerp_In.rcbuffer = &__pyx_pybuffer_VPerp_In;
  __pyx_pybuffer_VPerp_Out.pybuffer.buf = NULL;
  __pyx_pybuffer_VPerp_Out.refcount = 0;
  __pyx_pybuffernd_VPerp_Out.data = NULL;
  __pyx_pybuffernd_VPerp_Out.rcbuffer = &__pyx_pybuffer_VPerp_Out;
  __pyx_pybuffer_indIn_.pybuffer.buf = NULL;
  __pyx_pybuffer_indIn_.refcount = 0;
  __pyx_pybuffernd_indIn_.data = NULL;
  __pyx_pybuffernd_indIn_.rcbuffer = &__pyx_pybuffer_indIn_;
  __pyx_pybuffer_indOut_.pybuffer.buf = NULL;
  __pyx_pybuffer_indOut_.refcount = 0;
  __pyx_pybuffernd_indOut_.data = NULL;
  __pyx_pybuffernd_indOut_.rcbuffer = &__pyx_pybuffer_indOut_;
+7180:     from warnings import warn
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_warn);
  __Pyx_GIVEREF(__pyx_n_s_warn);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_warn);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_warnings, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_warn); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_warn = __pyx_t_1;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7181:     warn("THIS IS THE OLD VERSION OF THIS FUNCTION, PLEASE USE THE NEW ONE",
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_warn, __pyx_tuple__132, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
/* … */
  __pyx_tuple__132 = PyTuple_Pack(2, __pyx_kp_s_THIS_IS_THE_OLD_VERSION_OF_THIS, __pyx_builtin_DeprecationWarning); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 7181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__132);
  __Pyx_GIVEREF(__pyx_tuple__132);
+7182:          DeprecationWarning, stacklevel=2)
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stacklevel, __pyx_int_2) < 0) __PYX_ERR(0, 7182, __pyx_L1_error)
 7183: 
+7184:     cdef int ii, jj, Nl=Ds.shape[1], Ns=vIn.shape[1]
  __pyx_v_Nl = (__pyx_v_Ds.shape[1]);
  __pyx_v_Ns = (__pyx_v_vIn.shape[1]);
 7185:     cdef double Rmin, upscaDp, upar2, Dpar2, Crit2, kout, kin
+7186:     cdef int indin=0, indout=0, Done=0
  __pyx_v_indin = 0;
  __pyx_v_indout = 0;
  __pyx_v_Done = 0;
+7187:     cdef double L, S1X=0., S1Y=0., S2X=0., S2Y=0., sca, sca0, sca1, sca2
  __pyx_v_S1X = 0.;
  __pyx_v_S1Y = 0.;
  __pyx_v_S2X = 0.;
  __pyx_v_S2Y = 0.;
+7188:     cdef double q, C, delta, sqd, k, sol0, sol1, phi=0., L0=0., L1=0.
  __pyx_v_phi = 0.;
  __pyx_v_L0 = 0.;
  __pyx_v_L1 = 0.;
 7189:     cdef double v0, v1, A, B, ephiIn0, ephiIn1
 7190:     cdef int Forbidbis, Forbid0
+7191:     cdef np.ndarray[double,ndim=2] SIn_=np.nan*np.ones((3,Nl)), SOut_=np.nan*np.ones((3,Nl))
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7191, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_SIn_.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_SIn_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7191, __pyx_L1_error)
    } else {__pyx_pybuffernd_SIn_.diminfo[0].strides = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_SIn_.diminfo[0].shape = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_SIn_.diminfo[1].strides = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_SIn_.diminfo[1].shape = __pyx_pybuffernd_SIn_.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_SIn_ = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_nan); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ones); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Multiply(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7191, __pyx_L1_error)
  __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_SOut_.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_SOut_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7191, __pyx_L1_error)
    } else {__pyx_pybuffernd_SOut_.diminfo[0].strides = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_SOut_.diminfo[0].shape = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_SOut_.diminfo[1].strides = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_SOut_.diminfo[1].shape = __pyx_pybuffernd_SOut_.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_6 = 0;
  __pyx_v_SOut_ = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
+7192:     cdef np.ndarray[double,ndim=2] VPerp_In=np.nan*np.ones((3,Nl)), VPerp_Out=np.nan*np.ones((3,Nl))
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_nan); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_5 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Multiply(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7192, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_3);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_VPerp_In = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7192, __pyx_L1_error)
    } else {__pyx_pybuffernd_VPerp_In.diminfo[0].strides = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPerp_In.diminfo[0].shape = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPerp_In.diminfo[1].strides = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPerp_In.diminfo[1].shape = __pyx_pybuffernd_VPerp_In.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_VPerp_In = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_nan); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_int_3);
  __Pyx_GIVEREF(__pyx_int_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_int_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
  __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7192, __pyx_L1_error)
  __pyx_t_7 = ((PyArrayObject *)__pyx_t_2);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer, (PyObject*)__pyx_t_7, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
      __pyx_v_VPerp_Out = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7192, __pyx_L1_error)
    } else {__pyx_pybuffernd_VPerp_Out.diminfo[0].strides = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_VPerp_Out.diminfo[0].shape = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_VPerp_Out.diminfo[1].strides = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_VPerp_Out.diminfo[1].shape = __pyx_pybuffernd_VPerp_Out.rcbuffer->pybuffer.shape[1];
    }
  }
  __pyx_t_7 = 0;
  __pyx_v_VPerp_Out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
+7193:     cdef np.ndarray[double,ndim=1] indIn_=np.nan*np.ones((Nl,)), indOut_=np.nan*np.ones((Nl,))
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_nan); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7193, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_1);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indIn_.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_indIn_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7193, __pyx_L1_error)
    } else {__pyx_pybuffernd_indIn_.diminfo[0].strides = __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indIn_.diminfo[0].shape = __pyx_pybuffernd_indIn_.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_indIn_ = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_nan); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ones); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_Nl); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 7193, __pyx_L1_error)
  __pyx_t_8 = ((PyArrayObject *)__pyx_t_4);
  {
    __Pyx_BufFmt_StackElem __pyx_stack[1];
    if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indOut_.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
      __pyx_v_indOut_ = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.buf = NULL;
      __PYX_ERR(0, 7193, __pyx_L1_error)
    } else {__pyx_pybuffernd_indOut_.diminfo[0].strides = __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indOut_.diminfo[0].shape = __pyx_pybuffernd_indOut_.rcbuffer->pybuffer.shape[0];
    }
  }
  __pyx_t_8 = 0;
  __pyx_v_indOut_ = ((PyArrayObject *)__pyx_t_4);
  __pyx_t_4 = 0;
 7194: 
+7195:     cdef double[:,::1] SIn=SIn_, SOut=SOut_, VPerpIn=VPerp_In, VPerpOut=VPerp_Out
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_SIn_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 7195, __pyx_L1_error)
  __pyx_v_SIn = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_SOut_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 7195, __pyx_L1_error)
  __pyx_v_SOut = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPerp_In), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 7195, __pyx_L1_error)
  __pyx_v_VPerpIn = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
  __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_d_dc_double(((PyObject *)__pyx_v_VPerp_Out), PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 7195, __pyx_L1_error)
  __pyx_v_VPerpOut = __pyx_t_9;
  __pyx_t_9.memview = NULL;
  __pyx_t_9.data = NULL;
+7196:     cdef double[::1] indIn=indIn_, indOut=indOut_
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_indIn_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7196, __pyx_L1_error)
  __pyx_v_indIn = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
  __pyx_t_10 = __Pyx_PyObject_to_MemoryviewSlice_dc_double(((PyObject *)__pyx_v_indOut_), PyBUF_WRITABLE); if (unlikely(!__pyx_t_10.memview)) __PYX_ERR(0, 7196, __pyx_L1_error)
  __pyx_v_indOut = __pyx_t_10;
  __pyx_t_10.memview = NULL;
  __pyx_t_10.data = NULL;
+7197:     if Lim is not None:
  __pyx_t_11 = (__pyx_v_Lim != Py_None);
  __pyx_t_12 = (__pyx_t_11 != 0);
  if (__pyx_t_12) {
/* … */
  }
+7198:         L0 = Catan2(Csin(Lim[0]),Ccos(Lim[0]))
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_L0 = atan2(sin(__pyx_t_13), cos(__pyx_t_14));
+7199:         L1 = Catan2(Csin(Lim[1]),Ccos(Lim[1]))
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7199, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_Lim, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7199, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_L1 = atan2(sin(__pyx_t_14), cos(__pyx_t_13));
 7200: 
 7201:     ################
 7202:     # Prepare input
+7203:     if RMin is None:
  __pyx_t_12 = (__pyx_v_RMin == Py_None);
  __pyx_t_11 = (__pyx_t_12 != 0);
  if (__pyx_t_11) {
/* … */
    goto __pyx_L4;
  }
+7204:         Rmin = 0.95*min(np.min(VPoly[0,:]),np.min(np.hypot(Ds[0,:],Ds[1,:])))
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_hypot); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_10.data = __pyx_v_Ds.data;
    __pyx_t_10.memview = __pyx_v_Ds.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_Ds.strides[0];
        if ((0)) __PYX_ERR(0, 7204, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_Ds.shape[1];
__pyx_t_10.strides[0] = __pyx_v_Ds.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_5 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __pyx_t_10.data = __pyx_v_Ds.data;
    __pyx_t_10.memview = __pyx_v_Ds.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 1;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_Ds.strides[0];
        if ((0)) __PYX_ERR(0, 7204, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_Ds.shape[1];
__pyx_t_10.strides[0] = __pyx_v_Ds.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_15 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __pyx_t_16 = NULL;
    __pyx_t_17 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_16)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_16);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
        __pyx_t_17 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_t_5, __pyx_t_15};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
      PyObject *__pyx_temp[3] = {__pyx_t_16, __pyx_t_5, __pyx_t_15};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_17, 2+__pyx_t_17); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    } else
    #endif
    {
      __pyx_t_18 = PyTuple_New(2+__pyx_t_17); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7204, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      if (__pyx_t_16) {
        __Pyx_GIVEREF(__pyx_t_16); PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_16); __pyx_t_16 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_18, 0+__pyx_t_17, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_15);
      PyTuple_SET_ITEM(__pyx_t_18, 1+__pyx_t_17, __pyx_t_15);
      __pyx_t_5 = 0;
      __pyx_t_15 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10.data = __pyx_v_VPoly.data;
    __pyx_t_10.memview = __pyx_v_VPoly.memview;
    __PYX_INC_MEMVIEW(&__pyx_t_10, 0);
    {
    Py_ssize_t __pyx_tmp_idx = 0;
    Py_ssize_t __pyx_tmp_stride = __pyx_v_VPoly.strides[0];
        if ((0)) __PYX_ERR(0, 7204, __pyx_L1_error)
        __pyx_t_10.data += __pyx_tmp_idx * __pyx_tmp_stride;
}

__pyx_t_10.shape[0] = __pyx_v_VPoly.shape[1];
__pyx_t_10.strides[0] = __pyx_v_VPoly.strides[1];
    __pyx_t_10.suboffsets[0] = -1;

__pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_10, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __PYX_XDEC_MEMVIEW(&__pyx_t_10, 1);
    __pyx_t_10.memview = NULL;
    __pyx_t_10.data = NULL;
    __pyx_t_18 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_18)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_18);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_18, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_11) {
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_3 = __pyx_t_4;
    } else {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_3 = __pyx_t_2;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = PyNumber_Multiply(__pyx_float_0_95, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7204, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_Rmin = __pyx_t_13;
 7205:     else:
+7206:         Rmin = RMin
  /*else*/ {
    __pyx_t_13 = __pyx_PyFloat_AsDouble(__pyx_v_RMin); if (unlikely((__pyx_t_13 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 7206, __pyx_L1_error)
    __pyx_v_Rmin = __pyx_t_13;
  }
  __pyx_L4:;
 7207: 
 7208:     ################
 7209:     # Compute
+7210:     if Forbid:
  __pyx_t_11 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_Forbid)); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 7210, __pyx_L1_error)
  if (__pyx_t_11) {
/* … */
    goto __pyx_L5;
  }
+7211:         Forbid0, Forbidbis = 1, 1
    __pyx_t_17 = 1;
    __pyx_t_19 = 1;
    __pyx_v_Forbid0 = __pyx_t_17;
    __pyx_v_Forbidbis = __pyx_t_19;
 7212:     else:
+7213:         Forbid0, Forbidbis = 0, 0
  /*else*/ {
    __pyx_t_19 = 0;
    __pyx_t_17 = 0;
    __pyx_v_Forbid0 = __pyx_t_19;
    __pyx_v_Forbidbis = __pyx_t_17;
  }
  __pyx_L5:;
+7214:     for ii in range(0,Nl):
  __pyx_t_17 = __pyx_v_Nl;
  __pyx_t_19 = __pyx_t_17;
  for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
    __pyx_v_ii = __pyx_t_20;
+7215:         upscaDp = us[0,ii]*Ds[0,ii] + us[1,ii]*Ds[1,ii]
    __pyx_t_21 = 0;
    __pyx_t_22 = __pyx_v_ii;
    __pyx_t_23 = 0;
    __pyx_t_24 = __pyx_v_ii;
    __pyx_t_25 = 1;
    __pyx_t_26 = __pyx_v_ii;
    __pyx_t_27 = 1;
    __pyx_t_28 = __pyx_v_ii;
    __pyx_v_upscaDp = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_21 * __pyx_v_us.strides[0]) )) + __pyx_t_22)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_23 * __pyx_v_Ds.strides[0]) )) + __pyx_t_24)) )))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_25 * __pyx_v_us.strides[0]) )) + __pyx_t_26)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_27 * __pyx_v_Ds.strides[0]) )) + __pyx_t_28)) )))));
+7216:         upar2 = us[0,ii]**2 + us[1,ii]**2
    __pyx_t_29 = 0;
    __pyx_t_30 = __pyx_v_ii;
    __pyx_t_31 = 1;
    __pyx_t_32 = __pyx_v_ii;
    __pyx_v_upar2 = (pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_29 * __pyx_v_us.strides[0]) )) + __pyx_t_30)) ))), 2.0) + pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_31 * __pyx_v_us.strides[0]) )) + __pyx_t_32)) ))), 2.0));
+7217:         Dpar2 = Ds[0,ii]**2 + Ds[1,ii]**2
    __pyx_t_33 = 0;
    __pyx_t_34 = __pyx_v_ii;
    __pyx_t_35 = 1;
    __pyx_t_36 = __pyx_v_ii;
    __pyx_v_Dpar2 = (pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_33 * __pyx_v_Ds.strides[0]) )) + __pyx_t_34)) ))), 2.0) + pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_35 * __pyx_v_Ds.strides[0]) )) + __pyx_t_36)) ))), 2.0));
 7218:         # Prepare in case Forbid is True
+7219:         if Forbid0 and not Dpar2>0:
    __pyx_t_12 = (__pyx_v_Forbid0 != 0);
    if (__pyx_t_12) {
    } else {
      __pyx_t_11 = __pyx_t_12;
      goto __pyx_L9_bool_binop_done;
    }
    __pyx_t_12 = ((!((__pyx_v_Dpar2 > 0.0) != 0)) != 0);
    __pyx_t_11 = __pyx_t_12;
    __pyx_L9_bool_binop_done:;
    if (__pyx_t_11) {
/* … */
    }
+7220:             Forbidbis = 0
      __pyx_v_Forbidbis = 0;
+7221:         if Forbidbis:
    __pyx_t_11 = (__pyx_v_Forbidbis != 0);
    if (__pyx_t_11) {
/* … */
    }
 7222:             # Compute coordinates of the 2 points where the tangents touch the inner circle
+7223:             L = Csqrt(Dpar2-Rmin**2)
      __pyx_v_L = sqrt((__pyx_v_Dpar2 - pow(__pyx_v_Rmin, 2.0)));
+7224:             S1X = (Rmin**2*Ds[0,ii]+Rmin*Ds[1,ii]*L)/Dpar2
      __pyx_t_37 = 0;
      __pyx_t_38 = __pyx_v_ii;
      __pyx_t_39 = 1;
      __pyx_t_40 = __pyx_v_ii;
      __pyx_v_S1X = (((pow(__pyx_v_Rmin, 2.0) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_37 * __pyx_v_Ds.strides[0]) )) + __pyx_t_38)) )))) + ((__pyx_v_Rmin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_39 * __pyx_v_Ds.strides[0]) )) + __pyx_t_40)) )))) * __pyx_v_L)) / __pyx_v_Dpar2);
+7225:             S1Y = (Rmin**2*Ds[1,ii]-Rmin*Ds[0,ii]*L)/Dpar2
      __pyx_t_41 = 1;
      __pyx_t_42 = __pyx_v_ii;
      __pyx_t_43 = 0;
      __pyx_t_44 = __pyx_v_ii;
      __pyx_v_S1Y = (((pow(__pyx_v_Rmin, 2.0) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_41 * __pyx_v_Ds.strides[0]) )) + __pyx_t_42)) )))) - ((__pyx_v_Rmin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_43 * __pyx_v_Ds.strides[0]) )) + __pyx_t_44)) )))) * __pyx_v_L)) / __pyx_v_Dpar2);
+7226:             S2X = (Rmin**2*Ds[0,ii]-Rmin*Ds[1,ii]*L)/Dpar2
      __pyx_t_45 = 0;
      __pyx_t_46 = __pyx_v_ii;
      __pyx_t_47 = 1;
      __pyx_t_48 = __pyx_v_ii;
      __pyx_v_S2X = (((pow(__pyx_v_Rmin, 2.0) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_45 * __pyx_v_Ds.strides[0]) )) + __pyx_t_46)) )))) - ((__pyx_v_Rmin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_47 * __pyx_v_Ds.strides[0]) )) + __pyx_t_48)) )))) * __pyx_v_L)) / __pyx_v_Dpar2);
+7227:             S2Y = (Rmin**2*Ds[1,ii]+Rmin*Ds[0,ii]*L)/Dpar2
      __pyx_t_49 = 1;
      __pyx_t_50 = __pyx_v_ii;
      __pyx_t_51 = 0;
      __pyx_t_52 = __pyx_v_ii;
      __pyx_v_S2Y = (((pow(__pyx_v_Rmin, 2.0) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_49 * __pyx_v_Ds.strides[0]) )) + __pyx_t_50)) )))) + ((__pyx_v_Rmin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_51 * __pyx_v_Ds.strides[0]) )) + __pyx_t_52)) )))) * __pyx_v_L)) / __pyx_v_Dpar2);
 7228: 
 7229:         # Compute all solutions
 7230:         # Set tolerance value for us[2,ii]
 7231:         # EpsUz is the tolerated DZ across 20m (max Tokamak size)
+7232:         Crit2 = EpsUz**2*upar2/400.
    __pyx_v_Crit2 = ((pow(__pyx_v_EpsUz, 2.0) * __pyx_v_upar2) / 400.);
+7233:         kout, kin, Done = 1.e12, 1e12, 0
    __pyx_t_13 = 1.e12;
    __pyx_t_14 = 1e12;
    __pyx_t_53 = 0;
    __pyx_v_kout = __pyx_t_13;
    __pyx_v_kin = __pyx_t_14;
    __pyx_v_Done = __pyx_t_53;
 7234:         # Case with horizontal semi-line
+7235:         if us[2,ii]**2<Crit2:
    __pyx_t_54 = 2;
    __pyx_t_55 = __pyx_v_ii;
    __pyx_t_11 = ((pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_54 * __pyx_v_us.strides[0]) )) + __pyx_t_55)) ))), 2.0) < __pyx_v_Crit2) != 0);
    if (__pyx_t_11) {
/* … */
      goto __pyx_L12;
    }
+7236:             for jj in range(0,Ns):
      __pyx_t_53 = __pyx_v_Ns;
      __pyx_t_56 = __pyx_t_53;
      for (__pyx_t_57 = 0; __pyx_t_57 < __pyx_t_56; __pyx_t_57+=1) {
        __pyx_v_jj = __pyx_t_57;
 7237:                 # Solutions exist only in the case with non-horizontal segment (i.e.: cone, not plane)
+7238:                 if (VPoly[1,jj+1]-VPoly[1,jj])**2>EpsVz**2:
        __pyx_t_58 = 1;
        __pyx_t_59 = (__pyx_v_jj + 1);
        __pyx_t_60 = 1;
        __pyx_t_61 = __pyx_v_jj;
        __pyx_t_11 = ((pow(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_58 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_59)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_60 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_61)) )))), 2.0) > pow(__pyx_v_EpsVz, 2.0)) != 0);
        if (__pyx_t_11) {
/* … */
        }
      }
+7239:                     q = (Ds[2,ii]-VPoly[1,jj])/(VPoly[1,jj+1]-VPoly[1,jj])
          __pyx_t_62 = 2;
          __pyx_t_63 = __pyx_v_ii;
          __pyx_t_64 = 1;
          __pyx_t_65 = __pyx_v_jj;
          __pyx_t_66 = 1;
          __pyx_t_67 = (__pyx_v_jj + 1);
          __pyx_t_68 = 1;
          __pyx_t_69 = __pyx_v_jj;
          __pyx_v_q = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_62 * __pyx_v_Ds.strides[0]) )) + __pyx_t_63)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_64 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_65)) )))) / ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_66 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_67)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_68 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_69)) )))));
 7240:                     # The intersection must stand on the segment
+7241:                     if q>=0 and q<1:
          __pyx_t_12 = ((__pyx_v_q >= 0.0) != 0);
          if (__pyx_t_12) {
          } else {
            __pyx_t_11 = __pyx_t_12;
            goto __pyx_L17_bool_binop_done;
          }
          __pyx_t_12 = ((__pyx_v_q < 1.0) != 0);
          __pyx_t_11 = __pyx_t_12;
          __pyx_L17_bool_binop_done:;
          if (__pyx_t_11) {
/* … */
          }
+7242:                         C = q**2*(VPoly[0,jj+1]-VPoly[0,jj])**2 + 2.*q*VPoly[0,jj]*(VPoly[0,jj+1]-VPoly[0,jj]) + VPoly[0,jj]**2
            __pyx_t_70 = 0;
            __pyx_t_71 = (__pyx_v_jj + 1);
            __pyx_t_72 = 0;
            __pyx_t_73 = __pyx_v_jj;
            __pyx_t_74 = 0;
            __pyx_t_75 = __pyx_v_jj;
            __pyx_t_76 = 0;
            __pyx_t_77 = (__pyx_v_jj + 1);
            __pyx_t_78 = 0;
            __pyx_t_79 = __pyx_v_jj;
            __pyx_t_80 = 0;
            __pyx_t_81 = __pyx_v_jj;
            __pyx_v_C = (((pow(__pyx_v_q, 2.0) * pow(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_70 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_71)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_72 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_73)) )))), 2.0)) + (((2. * __pyx_v_q) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_74 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_75)) )))) * ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_76 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_77)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_78 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_79)) )))))) + pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_80 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_81)) ))), 2.0));
+7243:                         delta = upscaDp**2 - upar2*(Dpar2-C)
            __pyx_v_delta = (pow(__pyx_v_upscaDp, 2.0) - (__pyx_v_upar2 * (__pyx_v_Dpar2 - __pyx_v_C)));
+7244:                         if delta>0.:
            __pyx_t_11 = ((__pyx_v_delta > 0.) != 0);
            if (__pyx_t_11) {
/* … */
            }
+7245:                             sqd = Csqrt(delta)
              __pyx_v_sqd = sqrt(__pyx_v_delta);
 7246:                             # The intersection must be on the semi-line (i.e.: k>=0)
 7247:                             # First solution
+7248:                             if -upscaDp - sqd >=0:
              __pyx_t_11 = ((((-__pyx_v_upscaDp) - __pyx_v_sqd) >= 0.0) != 0);
              if (__pyx_t_11) {
/* … */
              }
+7249:                                 k = (-upscaDp - sqd)/upar2
                __pyx_v_k = (((-__pyx_v_upscaDp) - __pyx_v_sqd) / __pyx_v_upar2);
+7250:                                 sol0, sol1 = Ds[0,ii] + k*us[0,ii], Ds[1,ii] + k*us[1,ii]
                __pyx_t_82 = 0;
                __pyx_t_83 = __pyx_v_ii;
                __pyx_t_84 = 0;
                __pyx_t_85 = __pyx_v_ii;
                __pyx_t_14 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_82 * __pyx_v_Ds.strides[0]) )) + __pyx_t_83)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_84 * __pyx_v_us.strides[0]) )) + __pyx_t_85)) )))));
                __pyx_t_86 = 1;
                __pyx_t_87 = __pyx_v_ii;
                __pyx_t_88 = 1;
                __pyx_t_89 = __pyx_v_ii;
                __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_86 * __pyx_v_Ds.strides[0]) )) + __pyx_t_87)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_88 * __pyx_v_us.strides[0]) )) + __pyx_t_89)) )))));
                __pyx_v_sol0 = __pyx_t_14;
                __pyx_v_sol1 = __pyx_t_13;
+7251:                                 if Forbidbis:
                __pyx_t_11 = (__pyx_v_Forbidbis != 0);
                if (__pyx_t_11) {
/* … */
                }
+7252:                                     sca0 = (sol0-S1X)*Ds[0,ii] + (sol1-S1Y)*Ds[1,ii]
                  __pyx_t_90 = 0;
                  __pyx_t_91 = __pyx_v_ii;
                  __pyx_t_92 = 1;
                  __pyx_t_93 = __pyx_v_ii;
                  __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_S1X) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_90 * __pyx_v_Ds.strides[0]) )) + __pyx_t_91)) )))) + ((__pyx_v_sol1 - __pyx_v_S1Y) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_92 * __pyx_v_Ds.strides[0]) )) + __pyx_t_93)) )))));
+7253:                                     sca1 = (sol0-S1X)*S1X + (sol1-S1Y)*S1Y
                  __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_S1X) * __pyx_v_S1X) + ((__pyx_v_sol1 - __pyx_v_S1Y) * __pyx_v_S1Y));
+7254:                                     sca2 = (sol0-S2X)*S2X + (sol1-S2Y)*S2Y
                  __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_S2X) * __pyx_v_S2X) + ((__pyx_v_sol1 - __pyx_v_S2Y) * __pyx_v_S2Y));
+7255:                                 if not Forbidbis or (Forbidbis and not (sca0<0 and sca1<0 and sca2<0)):
                __pyx_t_12 = ((!(__pyx_v_Forbidbis != 0)) != 0);
                if (!__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L23_bool_binop_done;
                }
                __pyx_t_12 = (__pyx_v_Forbidbis != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L23_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_sca0 < 0.0) != 0);
                if (__pyx_t_94) {
                } else {
                  __pyx_t_12 = __pyx_t_94;
                  goto __pyx_L26_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_sca1 < 0.0) != 0);
                if (__pyx_t_94) {
                } else {
                  __pyx_t_12 = __pyx_t_94;
                  goto __pyx_L26_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_sca2 < 0.0) != 0);
                __pyx_t_12 = __pyx_t_94;
                __pyx_L26_bool_binop_done:;
                __pyx_t_94 = ((!__pyx_t_12) != 0);
                __pyx_t_11 = __pyx_t_94;
                __pyx_L23_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
 7256:                                     # Get the normalized perpendicular vector at intersection
+7257:                                     phi = Catan2(sol1,sol0)
                  __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
 7258:                                     # Check sol inside the Lim
+7259:                                     if Lim is None or (Lim is not None and ((L0<L1 and L0<=phi and phi<=L1) or (L0>L1 and (phi>=L0 or phi<=L1)))):
                  __pyx_t_94 = (__pyx_v_Lim == Py_None);
                  __pyx_t_12 = (__pyx_t_94 != 0);
                  if (!__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_t_12 = (__pyx_v_Lim != Py_None);
                  __pyx_t_94 = (__pyx_t_12 != 0);
                  if (__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_t_94 = ((__pyx_v_L0 < __pyx_v_L1) != 0);
                  if (!__pyx_t_94) {
                    goto __pyx_L33_next_or;
                  } else {
                  }
                  __pyx_t_94 = ((__pyx_v_L0 <= __pyx_v_phi) != 0);
                  if (!__pyx_t_94) {
                    goto __pyx_L33_next_or;
                  } else {
                  }
                  __pyx_t_94 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                  if (!__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_L33_next_or:;
                  __pyx_t_94 = ((__pyx_v_L0 > __pyx_v_L1) != 0);
                  if (__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_t_94 = ((__pyx_v_phi >= __pyx_v_L0) != 0);
                  if (!__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L30_bool_binop_done;
                  }
                  __pyx_t_94 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                  __pyx_t_11 = __pyx_t_94;
                  __pyx_L30_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                  }
 7260:                                         # Get the scalar product to determine entry or exit point
+7261:                                         sca = Ccos(phi)*vIn[0,jj]*us[0,ii] + Csin(phi)*vIn[0,jj]*us[1,ii] + vIn[1,jj]*us[2,ii]
                    __pyx_t_95 = 0;
                    __pyx_t_96 = __pyx_v_jj;
                    __pyx_t_97 = 0;
                    __pyx_t_98 = __pyx_v_ii;
                    __pyx_t_99 = 0;
                    __pyx_t_100 = __pyx_v_jj;
                    __pyx_t_101 = 1;
                    __pyx_t_102 = __pyx_v_ii;
                    __pyx_t_103 = 1;
                    __pyx_t_104 = __pyx_v_jj;
                    __pyx_t_105 = 2;
                    __pyx_t_106 = __pyx_v_ii;
                    __pyx_v_sca = ((((cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_95 * __pyx_v_vIn.strides[0]) )) + __pyx_t_96)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_97 * __pyx_v_us.strides[0]) )) + __pyx_t_98)) )))) + ((sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_99 * __pyx_v_vIn.strides[0]) )) + __pyx_t_100)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_101 * __pyx_v_us.strides[0]) )) + __pyx_t_102)) ))))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_103 * __pyx_v_vIn.strides[0]) )) + __pyx_t_104)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_105 * __pyx_v_us.strides[0]) )) + __pyx_t_106)) )))));
+7262:                                         if sca<=0 and k<kout:
                    __pyx_t_94 = ((__pyx_v_sca <= 0.0) != 0);
                    if (__pyx_t_94) {
                    } else {
                      __pyx_t_11 = __pyx_t_94;
                      goto __pyx_L39_bool_binop_done;
                    }
                    __pyx_t_94 = ((__pyx_v_k < __pyx_v_kout) != 0);
                    __pyx_t_11 = __pyx_t_94;
                    __pyx_L39_bool_binop_done:;
                    if (__pyx_t_11) {
/* … */
                      goto __pyx_L38;
                    }
+7263:                                             kout = k
                      __pyx_v_kout = __pyx_v_k;
+7264:                                             indout = jj
                      __pyx_v_indout = __pyx_v_jj;
+7265:                                             Done = 1
                      __pyx_v_Done = 1;
 7266:                                             #print(1, k)
+7267:                                         elif sca>=0 and k<min(kin,kout):
                    __pyx_t_94 = ((__pyx_v_sca >= 0.0) != 0);
                    if (__pyx_t_94) {
                    } else {
                      __pyx_t_11 = __pyx_t_94;
                      goto __pyx_L41_bool_binop_done;
                    }
                    __pyx_t_13 = __pyx_v_kout;
                    __pyx_t_14 = __pyx_v_kin;
                    if (((__pyx_t_13 < __pyx_t_14) != 0)) {
                      __pyx_t_107 = __pyx_t_13;
                    } else {
                      __pyx_t_107 = __pyx_t_14;
                    }
                    __pyx_t_94 = ((__pyx_v_k < __pyx_t_107) != 0);
                    __pyx_t_11 = __pyx_t_94;
                    __pyx_L41_bool_binop_done:;
                    if (__pyx_t_11) {
/* … */
                    }
                    __pyx_L38:;
+7268:                                             kin = k
                      __pyx_v_kin = __pyx_v_k;
+7269:                                             indin = jj
                      __pyx_v_indin = __pyx_v_jj;
 7270:                                             #print(2, k)
 7271: 
 7272:                             # Second solution
+7273:                             if -upscaDp + sqd >=0:
              __pyx_t_11 = ((((-__pyx_v_upscaDp) + __pyx_v_sqd) >= 0.0) != 0);
              if (__pyx_t_11) {
/* … */
              }
+7274:                                 k = (-upscaDp + sqd)/upar2
                __pyx_v_k = (((-__pyx_v_upscaDp) + __pyx_v_sqd) / __pyx_v_upar2);
+7275:                                 sol0, sol1 = Ds[0,ii] + k*us[0,ii], Ds[1,ii] + k*us[1,ii]
                __pyx_t_108 = 0;
                __pyx_t_109 = __pyx_v_ii;
                __pyx_t_110 = 0;
                __pyx_t_111 = __pyx_v_ii;
                __pyx_t_107 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_108 * __pyx_v_Ds.strides[0]) )) + __pyx_t_109)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_110 * __pyx_v_us.strides[0]) )) + __pyx_t_111)) )))));
                __pyx_t_112 = 1;
                __pyx_t_113 = __pyx_v_ii;
                __pyx_t_114 = 1;
                __pyx_t_115 = __pyx_v_ii;
                __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_112 * __pyx_v_Ds.strides[0]) )) + __pyx_t_113)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_114 * __pyx_v_us.strides[0]) )) + __pyx_t_115)) )))));
                __pyx_v_sol0 = __pyx_t_107;
                __pyx_v_sol1 = __pyx_t_13;
+7276:                                 if Forbidbis:
                __pyx_t_11 = (__pyx_v_Forbidbis != 0);
                if (__pyx_t_11) {
/* … */
                }
+7277:                                     sca0 = (sol0-S1X)*Ds[0,ii] + (sol1-S1Y)*Ds[1,ii]
                  __pyx_t_116 = 0;
                  __pyx_t_117 = __pyx_v_ii;
                  __pyx_t_118 = 1;
                  __pyx_t_119 = __pyx_v_ii;
                  __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_S1X) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_116 * __pyx_v_Ds.strides[0]) )) + __pyx_t_117)) )))) + ((__pyx_v_sol1 - __pyx_v_S1Y) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_118 * __pyx_v_Ds.strides[0]) )) + __pyx_t_119)) )))));
+7278:                                     sca1 = (sol0-S1X)*S1X + (sol1-S1Y)*S1Y
                  __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_S1X) * __pyx_v_S1X) + ((__pyx_v_sol1 - __pyx_v_S1Y) * __pyx_v_S1Y));
+7279:                                     sca2 = (sol0-S2X)*S2X + (sol1-S2Y)*S2Y
                  __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_S2X) * __pyx_v_S2X) + ((__pyx_v_sol1 - __pyx_v_S2Y) * __pyx_v_S2Y));
+7280:                                 if not Forbidbis or (Forbidbis and not (sca0<0 and sca1<0 and sca2<0)):
                __pyx_t_94 = ((!(__pyx_v_Forbidbis != 0)) != 0);
                if (!__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L46_bool_binop_done;
                }
                __pyx_t_94 = (__pyx_v_Forbidbis != 0);
                if (__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L46_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_sca0 < 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_94 = __pyx_t_12;
                  goto __pyx_L49_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_sca1 < 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_94 = __pyx_t_12;
                  goto __pyx_L49_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_sca2 < 0.0) != 0);
                __pyx_t_94 = __pyx_t_12;
                __pyx_L49_bool_binop_done:;
                __pyx_t_12 = ((!__pyx_t_94) != 0);
                __pyx_t_11 = __pyx_t_12;
                __pyx_L46_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
 7281:                                     # Get the normalized perpendicular vector at intersection
+7282:                                     phi = Catan2(sol1,sol0)
                  __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+7283:                                     if Lim is None or (Lim is not None and ((L0<L1 and L0<=phi and phi<=L1) or (L0>L1 and (phi>=L0 or phi<=L1)))):
                  __pyx_t_12 = (__pyx_v_Lim == Py_None);
                  __pyx_t_94 = (__pyx_t_12 != 0);
                  if (!__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_t_94 = (__pyx_v_Lim != Py_None);
                  __pyx_t_12 = (__pyx_t_94 != 0);
                  if (__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_t_12 = ((__pyx_v_L0 < __pyx_v_L1) != 0);
                  if (!__pyx_t_12) {
                    goto __pyx_L56_next_or;
                  } else {
                  }
                  __pyx_t_12 = ((__pyx_v_L0 <= __pyx_v_phi) != 0);
                  if (!__pyx_t_12) {
                    goto __pyx_L56_next_or;
                  } else {
                  }
                  __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                  if (!__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_L56_next_or:;
                  __pyx_t_12 = ((__pyx_v_L0 > __pyx_v_L1) != 0);
                  if (__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_t_12 = ((__pyx_v_phi >= __pyx_v_L0) != 0);
                  if (!__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L53_bool_binop_done;
                  }
                  __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                  __pyx_t_11 = __pyx_t_12;
                  __pyx_L53_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                  }
 7284:                                         # Get the scalar product to determine entry or exit point
+7285:                                         sca = Ccos(phi)*vIn[0,jj]*us[0,ii] + Csin(phi)*vIn[0,jj]*us[1,ii] + vIn[1,jj]*us[2,ii]
                    __pyx_t_120 = 0;
                    __pyx_t_121 = __pyx_v_jj;
                    __pyx_t_122 = 0;
                    __pyx_t_123 = __pyx_v_ii;
                    __pyx_t_124 = 0;
                    __pyx_t_125 = __pyx_v_jj;
                    __pyx_t_126 = 1;
                    __pyx_t_127 = __pyx_v_ii;
                    __pyx_t_128 = 1;
                    __pyx_t_129 = __pyx_v_jj;
                    __pyx_t_130 = 2;
                    __pyx_t_131 = __pyx_v_ii;
                    __pyx_v_sca = ((((cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_120 * __pyx_v_vIn.strides[0]) )) + __pyx_t_121)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_122 * __pyx_v_us.strides[0]) )) + __pyx_t_123)) )))) + ((sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_124 * __pyx_v_vIn.strides[0]) )) + __pyx_t_125)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_126 * __pyx_v_us.strides[0]) )) + __pyx_t_127)) ))))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_128 * __pyx_v_vIn.strides[0]) )) + __pyx_t_129)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_130 * __pyx_v_us.strides[0]) )) + __pyx_t_131)) )))));
+7286:                                         if sca<=0 and k<kout:
                    __pyx_t_12 = ((__pyx_v_sca <= 0.0) != 0);
                    if (__pyx_t_12) {
                    } else {
                      __pyx_t_11 = __pyx_t_12;
                      goto __pyx_L62_bool_binop_done;
                    }
                    __pyx_t_12 = ((__pyx_v_k < __pyx_v_kout) != 0);
                    __pyx_t_11 = __pyx_t_12;
                    __pyx_L62_bool_binop_done:;
                    if (__pyx_t_11) {
/* … */
                      goto __pyx_L61;
                    }
+7287:                                             kout = k
                      __pyx_v_kout = __pyx_v_k;
+7288:                                             indout = jj
                      __pyx_v_indout = __pyx_v_jj;
+7289:                                             Done = 1
                      __pyx_v_Done = 1;
 7290:                                             #print(3, k)
+7291:                                         elif sca>=0 and k<min(kin,kout):
                    __pyx_t_12 = ((__pyx_v_sca >= 0.0) != 0);
                    if (__pyx_t_12) {
                    } else {
                      __pyx_t_11 = __pyx_t_12;
                      goto __pyx_L64_bool_binop_done;
                    }
                    __pyx_t_13 = __pyx_v_kout;
                    __pyx_t_107 = __pyx_v_kin;
                    if (((__pyx_t_13 < __pyx_t_107) != 0)) {
                      __pyx_t_14 = __pyx_t_13;
                    } else {
                      __pyx_t_14 = __pyx_t_107;
                    }
                    __pyx_t_12 = ((__pyx_v_k < __pyx_t_14) != 0);
                    __pyx_t_11 = __pyx_t_12;
                    __pyx_L64_bool_binop_done:;
                    if (__pyx_t_11) {
/* … */
                    }
                    __pyx_L61:;
+7292:                                             kin = k
                      __pyx_v_kin = __pyx_v_k;
+7293:                                             indin = jj
                      __pyx_v_indin = __pyx_v_jj;
 7294:                                             #print(4, k)
 7295: 
 7296:         # More general non-horizontal semi-line case
 7297:         else:
+7298:             for jj in range(Ns):
    /*else*/ {
      __pyx_t_53 = __pyx_v_Ns;
      __pyx_t_56 = __pyx_t_53;
      for (__pyx_t_57 = 0; __pyx_t_57 < __pyx_t_56; __pyx_t_57+=1) {
        __pyx_v_jj = __pyx_t_57;
+7299:                 v0, v1 = VPoly[0,jj+1]-VPoly[0,jj], VPoly[1,jj+1]-VPoly[1,jj]
        __pyx_t_132 = 0;
        __pyx_t_133 = (__pyx_v_jj + 1);
        __pyx_t_134 = 0;
        __pyx_t_135 = __pyx_v_jj;
        __pyx_t_14 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_132 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_133)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_134 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_135)) ))));
        __pyx_t_136 = 1;
        __pyx_t_137 = (__pyx_v_jj + 1);
        __pyx_t_138 = 1;
        __pyx_t_139 = __pyx_v_jj;
        __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_136 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_137)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_138 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_139)) ))));
        __pyx_v_v0 = __pyx_t_14;
        __pyx_v_v1 = __pyx_t_13;
+7300:                 A = v0**2 - upar2*(v1/us[2,ii])**2
        __pyx_t_140 = 2;
        __pyx_t_141 = __pyx_v_ii;
        __pyx_v_A = (pow(__pyx_v_v0, 2.0) - (__pyx_v_upar2 * pow((__pyx_v_v1 / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_140 * __pyx_v_us.strides[0]) )) + __pyx_t_141)) )))), 2.0)));
+7301:                 B = VPoly[0,jj]*v0 + v1*(Ds[2,ii]-VPoly[1,jj])*upar2/us[2,ii]**2 - upscaDp*v1/us[2,ii]
        __pyx_t_142 = 0;
        __pyx_t_143 = __pyx_v_jj;
        __pyx_t_144 = 2;
        __pyx_t_145 = __pyx_v_ii;
        __pyx_t_146 = 1;
        __pyx_t_147 = __pyx_v_jj;
        __pyx_t_148 = 2;
        __pyx_t_149 = __pyx_v_ii;
        __pyx_t_150 = 2;
        __pyx_t_151 = __pyx_v_ii;
        __pyx_v_B = ((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_142 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_143)) ))) * __pyx_v_v0) + (((__pyx_v_v1 * ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_144 * __pyx_v_Ds.strides[0]) )) + __pyx_t_145)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_146 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_147)) ))))) * __pyx_v_upar2) / pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_148 * __pyx_v_us.strides[0]) )) + __pyx_t_149)) ))), 2.0))) - ((__pyx_v_upscaDp * __pyx_v_v1) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_150 * __pyx_v_us.strides[0]) )) + __pyx_t_151)) )))));
+7302:                 C = -upar2*(Ds[2,ii]-VPoly[1,jj])**2/us[2,ii]**2 + 2.*upscaDp*(Ds[2,ii]-VPoly[1,jj])/us[2,ii] - Dpar2 + VPoly[0,jj]**2
        __pyx_t_152 = 2;
        __pyx_t_153 = __pyx_v_ii;
        __pyx_t_154 = 1;
        __pyx_t_155 = __pyx_v_jj;
        __pyx_t_156 = 2;
        __pyx_t_157 = __pyx_v_ii;
        __pyx_t_158 = 2;
        __pyx_t_159 = __pyx_v_ii;
        __pyx_t_160 = 1;
        __pyx_t_161 = __pyx_v_jj;
        __pyx_t_162 = 2;
        __pyx_t_163 = __pyx_v_ii;
        __pyx_t_164 = 0;
        __pyx_t_165 = __pyx_v_jj;
        __pyx_v_C = ((((((-__pyx_v_upar2) * pow(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_152 * __pyx_v_Ds.strides[0]) )) + __pyx_t_153)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_154 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_155)) )))), 2.0)) / pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_156 * __pyx_v_us.strides[0]) )) + __pyx_t_157)) ))), 2.0)) + (((2. * __pyx_v_upscaDp) * ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_158 * __pyx_v_Ds.strides[0]) )) + __pyx_t_159)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_160 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_161)) ))))) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_162 * __pyx_v_us.strides[0]) )) + __pyx_t_163)) ))))) - __pyx_v_Dpar2) + pow((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_164 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_165)) ))), 2.0));
 7303: 
+7304:                 if A**2<EpsA**2 and B**2>EpsB**2:
        __pyx_t_12 = ((pow(__pyx_v_A, 2.0) < pow(__pyx_v_EpsA, 2.0)) != 0);
        if (__pyx_t_12) {
        } else {
          __pyx_t_11 = __pyx_t_12;
          goto __pyx_L69_bool_binop_done;
        }
        __pyx_t_12 = ((pow(__pyx_v_B, 2.0) > pow(__pyx_v_EpsB, 2.0)) != 0);
        __pyx_t_11 = __pyx_t_12;
        __pyx_L69_bool_binop_done:;
        if (__pyx_t_11) {
/* … */
          goto __pyx_L68;
        }
+7305:                     q = -C/(2.*B)
          __pyx_v_q = ((-__pyx_v_C) / (2. * __pyx_v_B));
+7306:                     if q>=0. and q<1.:
          __pyx_t_12 = ((__pyx_v_q >= 0.) != 0);
          if (__pyx_t_12) {
          } else {
            __pyx_t_11 = __pyx_t_12;
            goto __pyx_L72_bool_binop_done;
          }
          __pyx_t_12 = ((__pyx_v_q < 1.) != 0);
          __pyx_t_11 = __pyx_t_12;
          __pyx_L72_bool_binop_done:;
          if (__pyx_t_11) {
/* … */
          }
+7307:                         k = (q*v1 - (Ds[2,ii]-VPoly[1,jj]))/us[2,ii]
            __pyx_t_166 = 2;
            __pyx_t_167 = __pyx_v_ii;
            __pyx_t_168 = 1;
            __pyx_t_169 = __pyx_v_jj;
            __pyx_t_170 = 2;
            __pyx_t_171 = __pyx_v_ii;
            __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_166 * __pyx_v_Ds.strides[0]) )) + __pyx_t_167)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_168 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_169)) ))))) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_170 * __pyx_v_us.strides[0]) )) + __pyx_t_171)) ))));
+7308:                         if k>=0:
            __pyx_t_11 = ((__pyx_v_k >= 0.0) != 0);
            if (__pyx_t_11) {
/* … */
            }
+7309:                             sol0, sol1 = Ds[0,ii] + k*us[0,ii], Ds[1,ii] + k*us[1,ii]
              __pyx_t_172 = 0;
              __pyx_t_173 = __pyx_v_ii;
              __pyx_t_174 = 0;
              __pyx_t_175 = __pyx_v_ii;
              __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_172 * __pyx_v_Ds.strides[0]) )) + __pyx_t_173)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_174 * __pyx_v_us.strides[0]) )) + __pyx_t_175)) )))));
              __pyx_t_176 = 1;
              __pyx_t_177 = __pyx_v_ii;
              __pyx_t_178 = 1;
              __pyx_t_179 = __pyx_v_ii;
              __pyx_t_14 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_176 * __pyx_v_Ds.strides[0]) )) + __pyx_t_177)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_178 * __pyx_v_us.strides[0]) )) + __pyx_t_179)) )))));
              __pyx_v_sol0 = __pyx_t_13;
              __pyx_v_sol1 = __pyx_t_14;
+7310:                             if Forbidbis:
              __pyx_t_11 = (__pyx_v_Forbidbis != 0);
              if (__pyx_t_11) {
/* … */
              }
+7311:                                 sca0 = (sol0-S1X)*Ds[0,ii] + (sol1-S1Y)*Ds[1,ii]
                __pyx_t_180 = 0;
                __pyx_t_181 = __pyx_v_ii;
                __pyx_t_182 = 1;
                __pyx_t_183 = __pyx_v_ii;
                __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_S1X) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_180 * __pyx_v_Ds.strides[0]) )) + __pyx_t_181)) )))) + ((__pyx_v_sol1 - __pyx_v_S1Y) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_182 * __pyx_v_Ds.strides[0]) )) + __pyx_t_183)) )))));
+7312:                                 sca1 = (sol0-S1X)*S1X + (sol1-S1Y)*S1Y
                __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_S1X) * __pyx_v_S1X) + ((__pyx_v_sol1 - __pyx_v_S1Y) * __pyx_v_S1Y));
+7313:                                 sca2 = (sol0-S2X)*S2X + (sol1-S2Y)*S2Y
                __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_S2X) * __pyx_v_S2X) + ((__pyx_v_sol1 - __pyx_v_S2Y) * __pyx_v_S2Y));
 7314:                                 #print 1, k, kout, sca0, sca1, sca2
+7315:                                 if sca0<0 and sca1<0 and sca2<0:
                __pyx_t_12 = ((__pyx_v_sca0 < 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L77_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_sca1 < 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L77_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_sca2 < 0.0) != 0);
                __pyx_t_11 = __pyx_t_12;
                __pyx_L77_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
+7316:                                     continue
                  goto __pyx_L66_continue;
 7317:                             # Get the normalized perpendicular vector at intersection
+7318:                             phi = Catan2(sol1,sol0)
              __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+7319:                             if Lim is None or (Lim is not None and ((L0<L1 and L0<=phi and phi<=L1) or (L0>L1 and (phi>=L0 or phi<=L1)))):
              __pyx_t_12 = (__pyx_v_Lim == Py_None);
              __pyx_t_94 = (__pyx_t_12 != 0);
              if (!__pyx_t_94) {
              } else {
                __pyx_t_11 = __pyx_t_94;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_t_94 = (__pyx_v_Lim != Py_None);
              __pyx_t_12 = (__pyx_t_94 != 0);
              if (__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_L0 < __pyx_v_L1) != 0);
              if (!__pyx_t_12) {
                goto __pyx_L84_next_or;
              } else {
              }
              __pyx_t_12 = ((__pyx_v_L0 <= __pyx_v_phi) != 0);
              if (!__pyx_t_12) {
                goto __pyx_L84_next_or;
              } else {
              }
              __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
              if (!__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_L84_next_or:;
              __pyx_t_12 = ((__pyx_v_L0 > __pyx_v_L1) != 0);
              if (__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_phi >= __pyx_v_L0) != 0);
              if (!__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L81_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
              __pyx_t_11 = __pyx_t_12;
              __pyx_L81_bool_binop_done:;
              if (__pyx_t_11) {
/* … */
              }
 7320:                                 # Get the scalar product to determine entry or exit point
+7321:                                 sca = Ccos(phi)*vIn[0,jj]*us[0,ii] + Csin(phi)*vIn[0,jj]*us[1,ii] + vIn[1,jj]*us[2,ii]
                __pyx_t_184 = 0;
                __pyx_t_185 = __pyx_v_jj;
                __pyx_t_186 = 0;
                __pyx_t_187 = __pyx_v_ii;
                __pyx_t_188 = 0;
                __pyx_t_189 = __pyx_v_jj;
                __pyx_t_190 = 1;
                __pyx_t_191 = __pyx_v_ii;
                __pyx_t_192 = 1;
                __pyx_t_193 = __pyx_v_jj;
                __pyx_t_194 = 2;
                __pyx_t_195 = __pyx_v_ii;
                __pyx_v_sca = ((((cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_184 * __pyx_v_vIn.strides[0]) )) + __pyx_t_185)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_186 * __pyx_v_us.strides[0]) )) + __pyx_t_187)) )))) + ((sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_188 * __pyx_v_vIn.strides[0]) )) + __pyx_t_189)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_190 * __pyx_v_us.strides[0]) )) + __pyx_t_191)) ))))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_192 * __pyx_v_vIn.strides[0]) )) + __pyx_t_193)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_194 * __pyx_v_us.strides[0]) )) + __pyx_t_195)) )))));
+7322:                                 if sca<=0 and k<kout:
                __pyx_t_12 = ((__pyx_v_sca <= 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L90_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_k < __pyx_v_kout) != 0);
                __pyx_t_11 = __pyx_t_12;
                __pyx_L90_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                  goto __pyx_L89;
                }
+7323:                                     kout = k
                  __pyx_v_kout = __pyx_v_k;
+7324:                                     indout = jj
                  __pyx_v_indout = __pyx_v_jj;
+7325:                                     Done = 1
                  __pyx_v_Done = 1;
 7326:                                     #print(5, k)
+7327:                                 elif sca>=0 and k<min(kin,kout):
                __pyx_t_12 = ((__pyx_v_sca >= 0.0) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L92_bool_binop_done;
                }
                __pyx_t_14 = __pyx_v_kout;
                __pyx_t_13 = __pyx_v_kin;
                if (((__pyx_t_14 < __pyx_t_13) != 0)) {
                  __pyx_t_107 = __pyx_t_14;
                } else {
                  __pyx_t_107 = __pyx_t_13;
                }
                __pyx_t_12 = ((__pyx_v_k < __pyx_t_107) != 0);
                __pyx_t_11 = __pyx_t_12;
                __pyx_L92_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
                __pyx_L89:;
+7328:                                     kin = k
                  __pyx_v_kin = __pyx_v_k;
+7329:                                     indin = jj
                  __pyx_v_indin = __pyx_v_jj;
 7330:                                     #print(6, k)
 7331: 
+7332:                 elif A**2>=EpsA**2 and B**2>A*C:
        __pyx_t_12 = ((pow(__pyx_v_A, 2.0) >= pow(__pyx_v_EpsA, 2.0)) != 0);
        if (__pyx_t_12) {
        } else {
          __pyx_t_11 = __pyx_t_12;
          goto __pyx_L94_bool_binop_done;
        }
        __pyx_t_12 = ((pow(__pyx_v_B, 2.0) > (__pyx_v_A * __pyx_v_C)) != 0);
        __pyx_t_11 = __pyx_t_12;
        __pyx_L94_bool_binop_done:;
        if (__pyx_t_11) {
/* … */
        }
        __pyx_L68:;
        __pyx_L66_continue:;
      }
    }
    __pyx_L12:;
+7333:                     sqd = Csqrt(B**2-A*C)
          __pyx_v_sqd = sqrt((pow(__pyx_v_B, 2.0) - (__pyx_v_A * __pyx_v_C)));
 7334:                     # First solution
+7335:                     q = (-B + sqd)/A
          __pyx_v_q = (((-__pyx_v_B) + __pyx_v_sqd) / __pyx_v_A);
+7336:                     if q>=0. and q<1.:
          __pyx_t_12 = ((__pyx_v_q >= 0.) != 0);
          if (__pyx_t_12) {
          } else {
            __pyx_t_11 = __pyx_t_12;
            goto __pyx_L97_bool_binop_done;
          }
          __pyx_t_12 = ((__pyx_v_q < 1.) != 0);
          __pyx_t_11 = __pyx_t_12;
          __pyx_L97_bool_binop_done:;
          if (__pyx_t_11) {
/* … */
          }
+7337:                         k = (q*v1 - (Ds[2,ii]-VPoly[1,jj]))/us[2,ii]
            __pyx_t_196 = 2;
            __pyx_t_197 = __pyx_v_ii;
            __pyx_t_198 = 1;
            __pyx_t_199 = __pyx_v_jj;
            __pyx_t_200 = 2;
            __pyx_t_201 = __pyx_v_ii;
            __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_196 * __pyx_v_Ds.strides[0]) )) + __pyx_t_197)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_198 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_199)) ))))) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_200 * __pyx_v_us.strides[0]) )) + __pyx_t_201)) ))));
+7338:                         if k>=0.:
            __pyx_t_11 = ((__pyx_v_k >= 0.) != 0);
            if (__pyx_t_11) {
/* … */
            }
+7339:                             sol0, sol1 = Ds[0,ii] + k*us[0,ii], Ds[1,ii] + k*us[1,ii]
              __pyx_t_202 = 0;
              __pyx_t_203 = __pyx_v_ii;
              __pyx_t_204 = 0;
              __pyx_t_205 = __pyx_v_ii;
              __pyx_t_107 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_202 * __pyx_v_Ds.strides[0]) )) + __pyx_t_203)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_204 * __pyx_v_us.strides[0]) )) + __pyx_t_205)) )))));
              __pyx_t_206 = 1;
              __pyx_t_207 = __pyx_v_ii;
              __pyx_t_208 = 1;
              __pyx_t_209 = __pyx_v_ii;
              __pyx_t_14 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_206 * __pyx_v_Ds.strides[0]) )) + __pyx_t_207)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_208 * __pyx_v_us.strides[0]) )) + __pyx_t_209)) )))));
              __pyx_v_sol0 = __pyx_t_107;
              __pyx_v_sol1 = __pyx_t_14;
+7340:                             if Forbidbis:
              __pyx_t_11 = (__pyx_v_Forbidbis != 0);
              if (__pyx_t_11) {
/* … */
              }
+7341:                                 sca0 = (sol0-S1X)*Ds[0,ii] + (sol1-S1Y)*Ds[1,ii]
                __pyx_t_210 = 0;
                __pyx_t_211 = __pyx_v_ii;
                __pyx_t_212 = 1;
                __pyx_t_213 = __pyx_v_ii;
                __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_S1X) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_210 * __pyx_v_Ds.strides[0]) )) + __pyx_t_211)) )))) + ((__pyx_v_sol1 - __pyx_v_S1Y) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_212 * __pyx_v_Ds.strides[0]) )) + __pyx_t_213)) )))));
+7342:                                 sca1 = (sol0-S1X)*S1X + (sol1-S1Y)*S1Y
                __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_S1X) * __pyx_v_S1X) + ((__pyx_v_sol1 - __pyx_v_S1Y) * __pyx_v_S1Y));
+7343:                                 sca2 = (sol0-S2X)*S2X + (sol1-S2Y)*S2Y
                __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_S2X) * __pyx_v_S2X) + ((__pyx_v_sol1 - __pyx_v_S2Y) * __pyx_v_S2Y));
 7344:                                 #print 2, k, kout, sca0, sca1, sca2
+7345:                             if not Forbidbis or (Forbidbis and not (sca0<0 and sca1<0 and sca2<0)):
              __pyx_t_12 = ((!(__pyx_v_Forbidbis != 0)) != 0);
              if (!__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L102_bool_binop_done;
              }
              __pyx_t_12 = (__pyx_v_Forbidbis != 0);
              if (__pyx_t_12) {
              } else {
                __pyx_t_11 = __pyx_t_12;
                goto __pyx_L102_bool_binop_done;
              }
              __pyx_t_94 = ((__pyx_v_sca0 < 0.0) != 0);
              if (__pyx_t_94) {
              } else {
                __pyx_t_12 = __pyx_t_94;
                goto __pyx_L105_bool_binop_done;
              }
              __pyx_t_94 = ((__pyx_v_sca1 < 0.0) != 0);
              if (__pyx_t_94) {
              } else {
                __pyx_t_12 = __pyx_t_94;
                goto __pyx_L105_bool_binop_done;
              }
              __pyx_t_94 = ((__pyx_v_sca2 < 0.0) != 0);
              __pyx_t_12 = __pyx_t_94;
              __pyx_L105_bool_binop_done:;
              __pyx_t_94 = ((!__pyx_t_12) != 0);
              __pyx_t_11 = __pyx_t_94;
              __pyx_L102_bool_binop_done:;
              if (__pyx_t_11) {
/* … */
              }
 7346:                                 # Get the normalized perpendicular vector at intersection
+7347:                                 phi = Catan2(sol1,sol0)
                __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+7348:                                 if Lim is None or (Lim is not None and ((L0<L1 and L0<=phi and phi<=L1) or (L0>L1 and (phi>=L0 or phi<=L1)))):
                __pyx_t_94 = (__pyx_v_Lim == Py_None);
                __pyx_t_12 = (__pyx_t_94 != 0);
                if (!__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_t_12 = (__pyx_v_Lim != Py_None);
                __pyx_t_94 = (__pyx_t_12 != 0);
                if (__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_L0 < __pyx_v_L1) != 0);
                if (!__pyx_t_94) {
                  goto __pyx_L112_next_or;
                } else {
                }
                __pyx_t_94 = ((__pyx_v_L0 <= __pyx_v_phi) != 0);
                if (!__pyx_t_94) {
                  goto __pyx_L112_next_or;
                } else {
                }
                __pyx_t_94 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                if (!__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_L112_next_or:;
                __pyx_t_94 = ((__pyx_v_L0 > __pyx_v_L1) != 0);
                if (__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_phi >= __pyx_v_L0) != 0);
                if (!__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L109_bool_binop_done;
                }
                __pyx_t_94 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                __pyx_t_11 = __pyx_t_94;
                __pyx_L109_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
 7349:                                     # Get the scalar product to determine entry or exit point
+7350:                                     sca = Ccos(phi)*vIn[0,jj]*us[0,ii] + Csin(phi)*vIn[0,jj]*us[1,ii] + vIn[1,jj]*us[2,ii]
                  __pyx_t_214 = 0;
                  __pyx_t_215 = __pyx_v_jj;
                  __pyx_t_216 = 0;
                  __pyx_t_217 = __pyx_v_ii;
                  __pyx_t_218 = 0;
                  __pyx_t_219 = __pyx_v_jj;
                  __pyx_t_220 = 1;
                  __pyx_t_221 = __pyx_v_ii;
                  __pyx_t_222 = 1;
                  __pyx_t_223 = __pyx_v_jj;
                  __pyx_t_224 = 2;
                  __pyx_t_225 = __pyx_v_ii;
                  __pyx_v_sca = ((((cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_214 * __pyx_v_vIn.strides[0]) )) + __pyx_t_215)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_216 * __pyx_v_us.strides[0]) )) + __pyx_t_217)) )))) + ((sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_218 * __pyx_v_vIn.strides[0]) )) + __pyx_t_219)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_220 * __pyx_v_us.strides[0]) )) + __pyx_t_221)) ))))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_222 * __pyx_v_vIn.strides[0]) )) + __pyx_t_223)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_224 * __pyx_v_us.strides[0]) )) + __pyx_t_225)) )))));
+7351:                                     if sca<=0 and k<kout:
                  __pyx_t_94 = ((__pyx_v_sca <= 0.0) != 0);
                  if (__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L118_bool_binop_done;
                  }
                  __pyx_t_94 = ((__pyx_v_k < __pyx_v_kout) != 0);
                  __pyx_t_11 = __pyx_t_94;
                  __pyx_L118_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                    goto __pyx_L117;
                  }
+7352:                                         kout = k
                    __pyx_v_kout = __pyx_v_k;
+7353:                                         indout = jj
                    __pyx_v_indout = __pyx_v_jj;
+7354:                                         Done = 1
                    __pyx_v_Done = 1;
 7355:                                         #print(7, k, q, A, B, C, sqd)
+7356:                                     elif sca>=0 and k<min(kin,kout):
                  __pyx_t_94 = ((__pyx_v_sca >= 0.0) != 0);
                  if (__pyx_t_94) {
                  } else {
                    __pyx_t_11 = __pyx_t_94;
                    goto __pyx_L120_bool_binop_done;
                  }
                  __pyx_t_14 = __pyx_v_kout;
                  __pyx_t_107 = __pyx_v_kin;
                  if (((__pyx_t_14 < __pyx_t_107) != 0)) {
                    __pyx_t_13 = __pyx_t_14;
                  } else {
                    __pyx_t_13 = __pyx_t_107;
                  }
                  __pyx_t_94 = ((__pyx_v_k < __pyx_t_13) != 0);
                  __pyx_t_11 = __pyx_t_94;
                  __pyx_L120_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                  }
                  __pyx_L117:;
+7357:                                         kin = k
                    __pyx_v_kin = __pyx_v_k;
+7358:                                         indin = jj
                    __pyx_v_indin = __pyx_v_jj;
 7359:                                         #print(8, k, jj)
 7360: 
 7361:                     # Second solution
+7362:                     q = (-B - sqd)/A
          __pyx_v_q = (((-__pyx_v_B) - __pyx_v_sqd) / __pyx_v_A);
+7363:                     if q>=0. and q<1.:
          __pyx_t_94 = ((__pyx_v_q >= 0.) != 0);
          if (__pyx_t_94) {
          } else {
            __pyx_t_11 = __pyx_t_94;
            goto __pyx_L123_bool_binop_done;
          }
          __pyx_t_94 = ((__pyx_v_q < 1.) != 0);
          __pyx_t_11 = __pyx_t_94;
          __pyx_L123_bool_binop_done:;
          if (__pyx_t_11) {
/* … */
          }
+7364:                         k = (q*v1 - (Ds[2,ii]-VPoly[1,jj]))/us[2,ii]
            __pyx_t_226 = 2;
            __pyx_t_227 = __pyx_v_ii;
            __pyx_t_228 = 1;
            __pyx_t_229 = __pyx_v_jj;
            __pyx_t_230 = 2;
            __pyx_t_231 = __pyx_v_ii;
            __pyx_v_k = (((__pyx_v_q * __pyx_v_v1) - ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_226 * __pyx_v_Ds.strides[0]) )) + __pyx_t_227)) ))) - (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPoly.data + __pyx_t_228 * __pyx_v_VPoly.strides[0]) )) + __pyx_t_229)) ))))) / (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_230 * __pyx_v_us.strides[0]) )) + __pyx_t_231)) ))));
 7365: 
+7366:                         if k>=0.:
            __pyx_t_11 = ((__pyx_v_k >= 0.) != 0);
            if (__pyx_t_11) {
/* … */
            }
+7367:                             sol0, sol1 = Ds[0,ii] + k*us[0,ii], Ds[1,ii] + k*us[1,ii]
              __pyx_t_232 = 0;
              __pyx_t_233 = __pyx_v_ii;
              __pyx_t_234 = 0;
              __pyx_t_235 = __pyx_v_ii;
              __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_232 * __pyx_v_Ds.strides[0]) )) + __pyx_t_233)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_234 * __pyx_v_us.strides[0]) )) + __pyx_t_235)) )))));
              __pyx_t_236 = 1;
              __pyx_t_237 = __pyx_v_ii;
              __pyx_t_238 = 1;
              __pyx_t_239 = __pyx_v_ii;
              __pyx_t_14 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_236 * __pyx_v_Ds.strides[0]) )) + __pyx_t_237)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_238 * __pyx_v_us.strides[0]) )) + __pyx_t_239)) )))));
              __pyx_v_sol0 = __pyx_t_13;
              __pyx_v_sol1 = __pyx_t_14;
+7368:                             if Forbidbis:
              __pyx_t_11 = (__pyx_v_Forbidbis != 0);
              if (__pyx_t_11) {
/* … */
              }
+7369:                                 sca0 = (sol0-S1X)*Ds[0,ii] + (sol1-S1Y)*Ds[1,ii]
                __pyx_t_240 = 0;
                __pyx_t_241 = __pyx_v_ii;
                __pyx_t_242 = 1;
                __pyx_t_243 = __pyx_v_ii;
                __pyx_v_sca0 = (((__pyx_v_sol0 - __pyx_v_S1X) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_240 * __pyx_v_Ds.strides[0]) )) + __pyx_t_241)) )))) + ((__pyx_v_sol1 - __pyx_v_S1Y) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_242 * __pyx_v_Ds.strides[0]) )) + __pyx_t_243)) )))));
+7370:                                 sca1 = (sol0-S1X)*S1X + (sol1-S1Y)*S1Y
                __pyx_v_sca1 = (((__pyx_v_sol0 - __pyx_v_S1X) * __pyx_v_S1X) + ((__pyx_v_sol1 - __pyx_v_S1Y) * __pyx_v_S1Y));
+7371:                                 sca2 = (sol0-S2X)*S2X + (sol1-S2Y)*S2Y
                __pyx_v_sca2 = (((__pyx_v_sol0 - __pyx_v_S2X) * __pyx_v_S2X) + ((__pyx_v_sol1 - __pyx_v_S2Y) * __pyx_v_S2Y));
 7372:                                 #print 3, k, kout, sca0, sca1, sca2
+7373:                             if not Forbidbis or (Forbidbis and not (sca0<0 and sca1<0 and sca2<0)):
              __pyx_t_94 = ((!(__pyx_v_Forbidbis != 0)) != 0);
              if (!__pyx_t_94) {
              } else {
                __pyx_t_11 = __pyx_t_94;
                goto __pyx_L128_bool_binop_done;
              }
              __pyx_t_94 = (__pyx_v_Forbidbis != 0);
              if (__pyx_t_94) {
              } else {
                __pyx_t_11 = __pyx_t_94;
                goto __pyx_L128_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_sca0 < 0.0) != 0);
              if (__pyx_t_12) {
              } else {
                __pyx_t_94 = __pyx_t_12;
                goto __pyx_L131_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_sca1 < 0.0) != 0);
              if (__pyx_t_12) {
              } else {
                __pyx_t_94 = __pyx_t_12;
                goto __pyx_L131_bool_binop_done;
              }
              __pyx_t_12 = ((__pyx_v_sca2 < 0.0) != 0);
              __pyx_t_94 = __pyx_t_12;
              __pyx_L131_bool_binop_done:;
              __pyx_t_12 = ((!__pyx_t_94) != 0);
              __pyx_t_11 = __pyx_t_12;
              __pyx_L128_bool_binop_done:;
              if (__pyx_t_11) {
/* … */
              }
 7374:                                 # Get the normalized perpendicular vector at intersection
+7375:                                 phi = Catan2(sol1,sol0)
                __pyx_v_phi = atan2(__pyx_v_sol1, __pyx_v_sol0);
+7376:                                 if Lim is None or (Lim is not None and ((L0<L1 and L0<=phi and phi<=L1) or (L0>L1 and (phi>=L0 or phi<=L1)))):
                __pyx_t_12 = (__pyx_v_Lim == Py_None);
                __pyx_t_94 = (__pyx_t_12 != 0);
                if (!__pyx_t_94) {
                } else {
                  __pyx_t_11 = __pyx_t_94;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_t_94 = (__pyx_v_Lim != Py_None);
                __pyx_t_12 = (__pyx_t_94 != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_L0 < __pyx_v_L1) != 0);
                if (!__pyx_t_12) {
                  goto __pyx_L138_next_or;
                } else {
                }
                __pyx_t_12 = ((__pyx_v_L0 <= __pyx_v_phi) != 0);
                if (!__pyx_t_12) {
                  goto __pyx_L138_next_or;
                } else {
                }
                __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                if (!__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_L138_next_or:;
                __pyx_t_12 = ((__pyx_v_L0 > __pyx_v_L1) != 0);
                if (__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_phi >= __pyx_v_L0) != 0);
                if (!__pyx_t_12) {
                } else {
                  __pyx_t_11 = __pyx_t_12;
                  goto __pyx_L135_bool_binop_done;
                }
                __pyx_t_12 = ((__pyx_v_phi <= __pyx_v_L1) != 0);
                __pyx_t_11 = __pyx_t_12;
                __pyx_L135_bool_binop_done:;
                if (__pyx_t_11) {
/* … */
                }
 7377:                                     # Get the scalar product to determine entry or exit point
+7378:                                     sca = Ccos(phi)*vIn[0,jj]*us[0,ii] + Csin(phi)*vIn[0,jj]*us[1,ii] + vIn[1,jj]*us[2,ii]
                  __pyx_t_244 = 0;
                  __pyx_t_245 = __pyx_v_jj;
                  __pyx_t_246 = 0;
                  __pyx_t_247 = __pyx_v_ii;
                  __pyx_t_248 = 0;
                  __pyx_t_249 = __pyx_v_jj;
                  __pyx_t_250 = 1;
                  __pyx_t_251 = __pyx_v_ii;
                  __pyx_t_252 = 1;
                  __pyx_t_253 = __pyx_v_jj;
                  __pyx_t_254 = 2;
                  __pyx_t_255 = __pyx_v_ii;
                  __pyx_v_sca = ((((cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_244 * __pyx_v_vIn.strides[0]) )) + __pyx_t_245)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_246 * __pyx_v_us.strides[0]) )) + __pyx_t_247)) )))) + ((sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_248 * __pyx_v_vIn.strides[0]) )) + __pyx_t_249)) )))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_250 * __pyx_v_us.strides[0]) )) + __pyx_t_251)) ))))) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_252 * __pyx_v_vIn.strides[0]) )) + __pyx_t_253)) ))) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_254 * __pyx_v_us.strides[0]) )) + __pyx_t_255)) )))));
+7379:                                     if sca<=0 and k<kout:
                  __pyx_t_12 = ((__pyx_v_sca <= 0.0) != 0);
                  if (__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L144_bool_binop_done;
                  }
                  __pyx_t_12 = ((__pyx_v_k < __pyx_v_kout) != 0);
                  __pyx_t_11 = __pyx_t_12;
                  __pyx_L144_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                    goto __pyx_L143;
                  }
+7380:                                         kout = k
                    __pyx_v_kout = __pyx_v_k;
+7381:                                         indout = jj
                    __pyx_v_indout = __pyx_v_jj;
+7382:                                         Done = 1
                    __pyx_v_Done = 1;
 7383:                                         #print(9, k, jj)
+7384:                                     elif sca>=0 and k<min(kin,kout):
                  __pyx_t_12 = ((__pyx_v_sca >= 0.0) != 0);
                  if (__pyx_t_12) {
                  } else {
                    __pyx_t_11 = __pyx_t_12;
                    goto __pyx_L146_bool_binop_done;
                  }
                  __pyx_t_14 = __pyx_v_kout;
                  __pyx_t_13 = __pyx_v_kin;
                  if (((__pyx_t_14 < __pyx_t_13) != 0)) {
                    __pyx_t_107 = __pyx_t_14;
                  } else {
                    __pyx_t_107 = __pyx_t_13;
                  }
                  __pyx_t_12 = ((__pyx_v_k < __pyx_t_107) != 0);
                  __pyx_t_11 = __pyx_t_12;
                  __pyx_L146_bool_binop_done:;
                  if (__pyx_t_11) {
/* … */
                  }
                  __pyx_L143:;
+7385:                                         kin = k
                    __pyx_v_kin = __pyx_v_k;
+7386:                                         indin = jj
                    __pyx_v_indin = __pyx_v_jj;
 7387:                                         #print(10, k, q, A, B, C, sqd, v0, v1, jj)
 7388: 
+7389:         if Lim is not None:
    __pyx_t_11 = (__pyx_v_Lim != Py_None);
    __pyx_t_12 = (__pyx_t_11 != 0);
    if (__pyx_t_12) {
/* … */
    }
+7390:             ephiIn0, ephiIn1 = -Csin(L0), Ccos(L0)
      __pyx_t_107 = (-sin(__pyx_v_L0));
      __pyx_t_14 = cos(__pyx_v_L0);
      __pyx_v_ephiIn0 = __pyx_t_107;
      __pyx_v_ephiIn1 = __pyx_t_14;
+7391:             if Cabs(us[0,ii]*ephiIn0+us[1,ii]*ephiIn1)>EpsPlane:
      __pyx_t_256 = 0;
      __pyx_t_257 = __pyx_v_ii;
      __pyx_t_258 = 1;
      __pyx_t_259 = __pyx_v_ii;
      __pyx_t_12 = ((fabs((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_256 * __pyx_v_us.strides[0]) )) + __pyx_t_257)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_258 * __pyx_v_us.strides[0]) )) + __pyx_t_259)) ))) * __pyx_v_ephiIn1))) > __pyx_v_EpsPlane) != 0);
      if (__pyx_t_12) {
/* … */
      }
+7392:                 k = -(Ds[0,ii]*ephiIn0+Ds[1,ii]*ephiIn1)/(us[0,ii]*ephiIn0+us[1,ii]*ephiIn1)
        __pyx_t_260 = 0;
        __pyx_t_261 = __pyx_v_ii;
        __pyx_t_262 = 1;
        __pyx_t_263 = __pyx_v_ii;
        __pyx_t_264 = 0;
        __pyx_t_265 = __pyx_v_ii;
        __pyx_t_266 = 1;
        __pyx_t_267 = __pyx_v_ii;
        __pyx_v_k = ((-(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_260 * __pyx_v_Ds.strides[0]) )) + __pyx_t_261)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_262 * __pyx_v_Ds.strides[0]) )) + __pyx_t_263)) ))) * __pyx_v_ephiIn1))) / (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_264 * __pyx_v_us.strides[0]) )) + __pyx_t_265)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_266 * __pyx_v_us.strides[0]) )) + __pyx_t_267)) ))) * __pyx_v_ephiIn1)));
+7393:                 if k>=0:
        __pyx_t_12 = ((__pyx_v_k >= 0.0) != 0);
        if (__pyx_t_12) {
/* … */
        }
 7394:                     # Check if in VPoly
+7395:                     sol0, sol1 = (Ds[0,ii]+k*us[0,ii])*Ccos(L0) + (Ds[1,ii]+k*us[1,ii])*Csin(L0), Ds[2,ii]+k*us[2,ii]
          __pyx_t_268 = 0;
          __pyx_t_269 = __pyx_v_ii;
          __pyx_t_270 = 0;
          __pyx_t_271 = __pyx_v_ii;
          __pyx_t_272 = 1;
          __pyx_t_273 = __pyx_v_ii;
          __pyx_t_274 = 1;
          __pyx_t_275 = __pyx_v_ii;
          __pyx_t_14 = ((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_268 * __pyx_v_Ds.strides[0]) )) + __pyx_t_269)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_270 * __pyx_v_us.strides[0]) )) + __pyx_t_271)) ))))) * cos(__pyx_v_L0)) + (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_272 * __pyx_v_Ds.strides[0]) )) + __pyx_t_273)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_274 * __pyx_v_us.strides[0]) )) + __pyx_t_275)) ))))) * sin(__pyx_v_L0)));
          __pyx_t_276 = 2;
          __pyx_t_277 = __pyx_v_ii;
          __pyx_t_278 = 2;
          __pyx_t_279 = __pyx_v_ii;
          __pyx_t_107 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_276 * __pyx_v_Ds.strides[0]) )) + __pyx_t_277)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_278 * __pyx_v_us.strides[0]) )) + __pyx_t_279)) )))));
          __pyx_v_sol0 = __pyx_t_14;
          __pyx_v_sol1 = __pyx_t_107;
+7396:                     if Path(VPoly.T).contains_point([sol0,sol1], transform=None, radius=0.0):
          __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_280 = __pyx_v_VPoly;
          __PYX_INC_MEMVIEW(&__pyx_t_280, 1);
          if (unlikely(__pyx_memslice_transpose(&__pyx_t_280) == 0)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_280, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __PYX_XDEC_MEMVIEW(&__pyx_t_280, 1);
          __pyx_t_280.memview = NULL;
          __pyx_t_280.data = NULL;
          __pyx_t_1 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
            __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
            if (likely(__pyx_t_1)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
              __Pyx_INCREF(__pyx_t_1);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_3, function);
            }
          }
          __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2);
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_contains_point); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_sol0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_sol1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_2);
          PyList_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
          __pyx_t_4 = 0;
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_1);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
          __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 7396, __pyx_L1_error)
          if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 7396, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 7396, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (__pyx_t_12) {
/* … */
          }
 7397:                         # Check PIn (POut not possible for limited torus)
+7398:                         sca = us[0,ii]*ephiIn0 + us[1,ii]*ephiIn1
            __pyx_t_281 = 0;
            __pyx_t_282 = __pyx_v_ii;
            __pyx_t_283 = 1;
            __pyx_t_284 = __pyx_v_ii;
            __pyx_v_sca = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_281 * __pyx_v_us.strides[0]) )) + __pyx_t_282)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_283 * __pyx_v_us.strides[0]) )) + __pyx_t_284)) ))) * __pyx_v_ephiIn1));
+7399:                         if sca<=0 and k<kout:
            __pyx_t_11 = ((__pyx_v_sca <= 0.0) != 0);
            if (__pyx_t_11) {
            } else {
              __pyx_t_12 = __pyx_t_11;
              goto __pyx_L153_bool_binop_done;
            }
            __pyx_t_11 = ((__pyx_v_k < __pyx_v_kout) != 0);
            __pyx_t_12 = __pyx_t_11;
            __pyx_L153_bool_binop_done:;
            if (__pyx_t_12) {
/* … */
              goto __pyx_L152;
            }
+7400:                             kout = k
              __pyx_v_kout = __pyx_v_k;
+7401:                             indout = -1
              __pyx_v_indout = -1;
+7402:                             Done = 1
              __pyx_v_Done = 1;
+7403:                         elif sca>=0 and k<min(kin,kout):
            __pyx_t_11 = ((__pyx_v_sca >= 0.0) != 0);
            if (__pyx_t_11) {
            } else {
              __pyx_t_12 = __pyx_t_11;
              goto __pyx_L155_bool_binop_done;
            }
            __pyx_t_107 = __pyx_v_kout;
            __pyx_t_14 = __pyx_v_kin;
            if (((__pyx_t_107 < __pyx_t_14) != 0)) {
              __pyx_t_13 = __pyx_t_107;
            } else {
              __pyx_t_13 = __pyx_t_14;
            }
            __pyx_t_11 = ((__pyx_v_k < __pyx_t_13) != 0);
            __pyx_t_12 = __pyx_t_11;
            __pyx_L155_bool_binop_done:;
            if (__pyx_t_12) {
/* … */
            }
            __pyx_L152:;
+7404:                             kin = k
              __pyx_v_kin = __pyx_v_k;
+7405:                             indin = -1
              __pyx_v_indin = -1;
 7406: 
+7407:             ephiIn0, ephiIn1 = Csin(L1), -Ccos(L1)
      __pyx_t_13 = sin(__pyx_v_L1);
      __pyx_t_107 = (-cos(__pyx_v_L1));
      __pyx_v_ephiIn0 = __pyx_t_13;
      __pyx_v_ephiIn1 = __pyx_t_107;
+7408:             if Cabs(us[0,ii]*ephiIn0+us[1,ii]*ephiIn1)>EpsPlane:
      __pyx_t_285 = 0;
      __pyx_t_286 = __pyx_v_ii;
      __pyx_t_287 = 1;
      __pyx_t_288 = __pyx_v_ii;
      __pyx_t_12 = ((fabs((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_285 * __pyx_v_us.strides[0]) )) + __pyx_t_286)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_287 * __pyx_v_us.strides[0]) )) + __pyx_t_288)) ))) * __pyx_v_ephiIn1))) > __pyx_v_EpsPlane) != 0);
      if (__pyx_t_12) {
/* … */
      }
+7409:                 k = -(Ds[0,ii]*ephiIn0+Ds[1,ii]*ephiIn1)/(us[0,ii]*ephiIn0+us[1,ii]*ephiIn1)
        __pyx_t_289 = 0;
        __pyx_t_290 = __pyx_v_ii;
        __pyx_t_291 = 1;
        __pyx_t_292 = __pyx_v_ii;
        __pyx_t_293 = 0;
        __pyx_t_294 = __pyx_v_ii;
        __pyx_t_295 = 1;
        __pyx_t_296 = __pyx_v_ii;
        __pyx_v_k = ((-(((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_289 * __pyx_v_Ds.strides[0]) )) + __pyx_t_290)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_291 * __pyx_v_Ds.strides[0]) )) + __pyx_t_292)) ))) * __pyx_v_ephiIn1))) / (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_293 * __pyx_v_us.strides[0]) )) + __pyx_t_294)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_295 * __pyx_v_us.strides[0]) )) + __pyx_t_296)) ))) * __pyx_v_ephiIn1)));
+7410:                 if k>=0:
        __pyx_t_12 = ((__pyx_v_k >= 0.0) != 0);
        if (__pyx_t_12) {
/* … */
        }
+7411:                     sol0, sol1 = (Ds[0,ii]+k*us[0,ii])*Ccos(L1) + (Ds[1,ii]+k*us[1,ii])*Csin(L1), Ds[2,ii]+k*us[2,ii]
          __pyx_t_297 = 0;
          __pyx_t_298 = __pyx_v_ii;
          __pyx_t_299 = 0;
          __pyx_t_300 = __pyx_v_ii;
          __pyx_t_301 = 1;
          __pyx_t_302 = __pyx_v_ii;
          __pyx_t_303 = 1;
          __pyx_t_304 = __pyx_v_ii;
          __pyx_t_107 = ((((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_297 * __pyx_v_Ds.strides[0]) )) + __pyx_t_298)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_299 * __pyx_v_us.strides[0]) )) + __pyx_t_300)) ))))) * cos(__pyx_v_L1)) + (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_301 * __pyx_v_Ds.strides[0]) )) + __pyx_t_302)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_303 * __pyx_v_us.strides[0]) )) + __pyx_t_304)) ))))) * sin(__pyx_v_L1)));
          __pyx_t_305 = 2;
          __pyx_t_306 = __pyx_v_ii;
          __pyx_t_307 = 2;
          __pyx_t_308 = __pyx_v_ii;
          __pyx_t_13 = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_305 * __pyx_v_Ds.strides[0]) )) + __pyx_t_306)) ))) + (__pyx_v_k * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_307 * __pyx_v_us.strides[0]) )) + __pyx_t_308)) )))));
          __pyx_v_sol0 = __pyx_t_107;
          __pyx_v_sol1 = __pyx_t_13;
 7412:                     # Check if in VPoly
+7413:                     if Path(VPoly.T).contains_point([sol0,sol1], transform=None, radius=0.0):
          __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_280 = __pyx_v_VPoly;
          __PYX_INC_MEMVIEW(&__pyx_t_280, 1);
          if (unlikely(__pyx_memslice_transpose(&__pyx_t_280) == 0)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_280, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __PYX_XDEC_MEMVIEW(&__pyx_t_280, 1);
          __pyx_t_280.memview = NULL;
          __pyx_t_280.data = NULL;
          __pyx_t_3 = NULL;
          if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
            __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
            if (likely(__pyx_t_3)) {
              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
              __Pyx_INCREF(__pyx_t_3);
              __Pyx_INCREF(function);
              __Pyx_DECREF_SET(__pyx_t_1, function);
            }
          }
          __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2);
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_contains_point); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          __pyx_t_4 = PyFloat_FromDouble(__pyx_v_sol0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_2 = PyFloat_FromDouble(__pyx_v_sol1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_GIVEREF(__pyx_t_4);
          PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
          __Pyx_GIVEREF(__pyx_t_2);
          PyList_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
          __pyx_t_4 = 0;
          __pyx_t_2 = 0;
          __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_transform, Py_None) < 0) __PYX_ERR(0, 7413, __pyx_L1_error)
          if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_radius, __pyx_float_0_0) < 0) __PYX_ERR(0, 7413, __pyx_L1_error)
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 7413, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (__pyx_t_12) {
/* … */
          }
 7414:                         # Check PIn (POut not possible for limited torus)
+7415:                         sca = us[0,ii]*ephiIn0 + us[1,ii]*ephiIn1
            __pyx_t_309 = 0;
            __pyx_t_310 = __pyx_v_ii;
            __pyx_t_311 = 1;
            __pyx_t_312 = __pyx_v_ii;
            __pyx_v_sca = (((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_309 * __pyx_v_us.strides[0]) )) + __pyx_t_310)) ))) * __pyx_v_ephiIn0) + ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_311 * __pyx_v_us.strides[0]) )) + __pyx_t_312)) ))) * __pyx_v_ephiIn1));
+7416:                         if sca<=0 and k<kout:
            __pyx_t_11 = ((__pyx_v_sca <= 0.0) != 0);
            if (__pyx_t_11) {
            } else {
              __pyx_t_12 = __pyx_t_11;
              goto __pyx_L161_bool_binop_done;
            }
            __pyx_t_11 = ((__pyx_v_k < __pyx_v_kout) != 0);
            __pyx_t_12 = __pyx_t_11;
            __pyx_L161_bool_binop_done:;
            if (__pyx_t_12) {
/* … */
              goto __pyx_L160;
            }
+7417:                             kout = k
              __pyx_v_kout = __pyx_v_k;
+7418:                             indout = -2
              __pyx_v_indout = -2;
+7419:                             Done = 1
              __pyx_v_Done = 1;
+7420:                         elif sca>=0 and k<min(kin,kout):
            __pyx_t_11 = ((__pyx_v_sca >= 0.0) != 0);
            if (__pyx_t_11) {
            } else {
              __pyx_t_12 = __pyx_t_11;
              goto __pyx_L163_bool_binop_done;
            }
            __pyx_t_13 = __pyx_v_kout;
            __pyx_t_107 = __pyx_v_kin;
            if (((__pyx_t_13 < __pyx_t_107) != 0)) {
              __pyx_t_14 = __pyx_t_13;
            } else {
              __pyx_t_14 = __pyx_t_107;
            }
            __pyx_t_11 = ((__pyx_v_k < __pyx_t_14) != 0);
            __pyx_t_12 = __pyx_t_11;
            __pyx_L163_bool_binop_done:;
            if (__pyx_t_12) {
/* … */
            }
            __pyx_L160:;
+7421:                             kin = k
              __pyx_v_kin = __pyx_v_k;
+7422:                             indin = -2
              __pyx_v_indin = -2;
 7423: 
+7424:         if Done==1:
    __pyx_t_12 = ((__pyx_v_Done == 1) != 0);
    if (__pyx_t_12) {
/* … */
    }
  }
+7425:             SOut[0,ii] = Ds[0,ii] + kout*us[0,ii]
      __pyx_t_313 = 0;
      __pyx_t_314 = __pyx_v_ii;
      __pyx_t_315 = 0;
      __pyx_t_316 = __pyx_v_ii;
      __pyx_t_317 = 0;
      __pyx_t_318 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_317 * __pyx_v_SOut.strides[0]) )) + __pyx_t_318)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_313 * __pyx_v_Ds.strides[0]) )) + __pyx_t_314)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_315 * __pyx_v_us.strides[0]) )) + __pyx_t_316)) )))));
+7426:             SOut[1,ii] = Ds[1,ii] + kout*us[1,ii]
      __pyx_t_319 = 1;
      __pyx_t_320 = __pyx_v_ii;
      __pyx_t_321 = 1;
      __pyx_t_322 = __pyx_v_ii;
      __pyx_t_323 = 1;
      __pyx_t_324 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_323 * __pyx_v_SOut.strides[0]) )) + __pyx_t_324)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_319 * __pyx_v_Ds.strides[0]) )) + __pyx_t_320)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_321 * __pyx_v_us.strides[0]) )) + __pyx_t_322)) )))));
+7427:             SOut[2,ii] = Ds[2,ii] + kout*us[2,ii]
      __pyx_t_325 = 2;
      __pyx_t_326 = __pyx_v_ii;
      __pyx_t_327 = 2;
      __pyx_t_328 = __pyx_v_ii;
      __pyx_t_329 = 2;
      __pyx_t_330 = __pyx_v_ii;
      *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_329 * __pyx_v_SOut.strides[0]) )) + __pyx_t_330)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_325 * __pyx_v_Ds.strides[0]) )) + __pyx_t_326)) ))) + (__pyx_v_kout * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_327 * __pyx_v_us.strides[0]) )) + __pyx_t_328)) )))));
+7428:             phi = Catan2(SOut[1,ii],SOut[0,ii])
      __pyx_t_331 = 1;
      __pyx_t_332 = __pyx_v_ii;
      __pyx_t_333 = 0;
      __pyx_t_334 = __pyx_v_ii;
      __pyx_v_phi = atan2((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_331 * __pyx_v_SOut.strides[0]) )) + __pyx_t_332)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SOut.data + __pyx_t_333 * __pyx_v_SOut.strides[0]) )) + __pyx_t_334)) ))));
+7429:             if indout==-1:
      switch (__pyx_v_indout) {
        case -1L:
/* … */
        break;
        case -2L:
+7430:                 VPerpOut[0,ii] = -Csin(L0)
        __pyx_t_335 = 0;
        __pyx_t_336 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_335 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_336)) )) = (-sin(__pyx_v_L0));
+7431:                 VPerpOut[1,ii] = Ccos(L0)
        __pyx_t_337 = 1;
        __pyx_t_338 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_337 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_338)) )) = cos(__pyx_v_L0);
+7432:                 VPerpOut[2,ii] = 0.
        __pyx_t_339 = 2;
        __pyx_t_340 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_339 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_340)) )) = 0.;
+7433:             elif indout==-2:
        break;
        default:
+7434:                 VPerpOut[0,ii] = Csin(L1)
        __pyx_t_341 = 0;
        __pyx_t_342 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_341 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_342)) )) = sin(__pyx_v_L1);
+7435:                 VPerpOut[1,ii] = -Ccos(L1)
        __pyx_t_343 = 1;
        __pyx_t_344 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_343 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_344)) )) = (-cos(__pyx_v_L1));
+7436:                 VPerpOut[2,ii] = 0.
        __pyx_t_345 = 2;
        __pyx_t_346 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_345 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_346)) )) = 0.;
 7437:             else:
+7438:                 VPerpOut[0,ii] = Ccos(phi)*vIn[0,indout]
        __pyx_t_347 = 0;
        __pyx_t_348 = __pyx_v_indout;
        __pyx_t_349 = 0;
        __pyx_t_350 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_349 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_350)) )) = (cos(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_347 * __pyx_v_vIn.strides[0]) )) + __pyx_t_348)) ))));
+7439:                 VPerpOut[1,ii] = Csin(phi)*vIn[0,indout]
        __pyx_t_351 = 0;
        __pyx_t_352 = __pyx_v_indout;
        __pyx_t_353 = 1;
        __pyx_t_354 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_353 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_354)) )) = (sin(__pyx_v_phi) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_351 * __pyx_v_vIn.strides[0]) )) + __pyx_t_352)) ))));
+7440:                 VPerpOut[2,ii] = vIn[1,indout]
        __pyx_t_355 = 1;
        __pyx_t_356 = __pyx_v_indout;
        __pyx_t_357 = 2;
        __pyx_t_358 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpOut.data + __pyx_t_357 * __pyx_v_VPerpOut.strides[0]) )) + __pyx_t_358)) )) = (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_355 * __pyx_v_vIn.strides[0]) )) + __pyx_t_356)) )));
        break;
      }
+7441:             indOut[ii] = indout
      __pyx_t_359 = __pyx_v_ii;
      *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_indOut.data) + __pyx_t_359)) )) = __pyx_v_indout;
+7442:             if kin<kout:
      __pyx_t_12 = ((__pyx_v_kin < __pyx_v_kout) != 0);
      if (__pyx_t_12) {
/* … */
      }
+7443:                 SIn[0,ii] = Ds[0,ii] + kin*us[0,ii]
        __pyx_t_360 = 0;
        __pyx_t_361 = __pyx_v_ii;
        __pyx_t_362 = 0;
        __pyx_t_363 = __pyx_v_ii;
        __pyx_t_364 = 0;
        __pyx_t_365 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_364 * __pyx_v_SIn.strides[0]) )) + __pyx_t_365)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_360 * __pyx_v_Ds.strides[0]) )) + __pyx_t_361)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_362 * __pyx_v_us.strides[0]) )) + __pyx_t_363)) )))));
+7444:                 SIn[1,ii] = Ds[1,ii] + kin*us[1,ii]
        __pyx_t_366 = 1;
        __pyx_t_367 = __pyx_v_ii;
        __pyx_t_368 = 1;
        __pyx_t_369 = __pyx_v_ii;
        __pyx_t_370 = 1;
        __pyx_t_371 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_370 * __pyx_v_SIn.strides[0]) )) + __pyx_t_371)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_366 * __pyx_v_Ds.strides[0]) )) + __pyx_t_367)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_368 * __pyx_v_us.strides[0]) )) + __pyx_t_369)) )))));
+7445:                 SIn[2,ii] = Ds[2,ii] + kin*us[2,ii]
        __pyx_t_372 = 2;
        __pyx_t_373 = __pyx_v_ii;
        __pyx_t_374 = 2;
        __pyx_t_375 = __pyx_v_ii;
        __pyx_t_376 = 2;
        __pyx_t_377 = __pyx_v_ii;
        *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_376 * __pyx_v_SIn.strides[0]) )) + __pyx_t_377)) )) = ((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_Ds.data + __pyx_t_372 * __pyx_v_Ds.strides[0]) )) + __pyx_t_373)) ))) + (__pyx_v_kin * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_us.data + __pyx_t_374 * __pyx_v_us.strides[0]) )) + __pyx_t_375)) )))));
+7446:                 phi = Catan2(SIn[1,ii],SIn[0,ii])
        __pyx_t_378 = 1;
        __pyx_t_379 = __pyx_v_ii;
        __pyx_t_380 = 0;
        __pyx_t_381 = __pyx_v_ii;
        __pyx_v_phi = atan2((*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_378 * __pyx_v_SIn.strides[0]) )) + __pyx_t_379)) ))), (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_SIn.data + __pyx_t_380 * __pyx_v_SIn.strides[0]) )) + __pyx_t_381)) ))));
+7447:                 if indin==-1:
        switch (__pyx_v_indin) {
          case -1L:
/* … */
          break;
          case -2L:
+7448:                     VPerpIn[0,ii] = Csin(L0)
          __pyx_t_382 = 0;
          __pyx_t_383 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_382 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_383)) )) = sin(__pyx_v_L0);
+7449:                     VPerpIn[1,ii] = -Ccos(L0)
          __pyx_t_384 = 1;
          __pyx_t_385 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_384 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_385)) )) = (-cos(__pyx_v_L0));
+7450:                     VPerpIn[2,ii] = 0.
          __pyx_t_386 = 2;
          __pyx_t_387 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_386 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_387)) )) = 0.;
+7451:                 elif indin==-2:
          break;
          default:
+7452:                     VPerpIn[0,ii] = -Csin(L1)
          __pyx_t_388 = 0;
          __pyx_t_389 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_388 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_389)) )) = (-sin(__pyx_v_L1));
+7453:                     VPerpIn[1,ii] = Ccos(L1)
          __pyx_t_390 = 1;
          __pyx_t_391 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_390 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_391)) )) = cos(__pyx_v_L1);
+7454:                     VPerpIn[2,ii] = 0.
          __pyx_t_392 = 2;
          __pyx_t_393 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_392 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_393)) )) = 0.;
 7455:                 else:
+7456:                     VPerpIn[0,ii] = -Ccos(phi)*vIn[0,indin]
          __pyx_t_394 = 0;
          __pyx_t_395 = __pyx_v_indin;
          __pyx_t_396 = 0;
          __pyx_t_397 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_396 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_397)) )) = ((-cos(__pyx_v_phi)) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_394 * __pyx_v_vIn.strides[0]) )) + __pyx_t_395)) ))));
+7457:                     VPerpIn[1,ii] = -Csin(phi)*vIn[0,indin]
          __pyx_t_398 = 0;
          __pyx_t_399 = __pyx_v_indin;
          __pyx_t_400 = 1;
          __pyx_t_401 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_400 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_401)) )) = ((-sin(__pyx_v_phi)) * (*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_398 * __pyx_v_vIn.strides[0]) )) + __pyx_t_399)) ))));
+7458:                     VPerpIn[2,ii] = -vIn[1,indin]
          __pyx_t_402 = 1;
          __pyx_t_403 = __pyx_v_indin;
          __pyx_t_404 = 2;
          __pyx_t_405 = __pyx_v_ii;
          *((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_VPerpIn.data + __pyx_t_404 * __pyx_v_VPerpIn.strides[0]) )) + __pyx_t_405)) )) = (-(*((double *) ( /* dim=1 */ ((char *) (((double *) ( /* dim=0 */ (__pyx_v_vIn.data + __pyx_t_402 * __pyx_v_vIn.strides[0]) )) + __pyx_t_403)) ))));
          break;
        }
+7459:                 indIn[ii] = indin
        __pyx_t_406 = __pyx_v_ii;
        *((double *) ( /* dim=0 */ ((char *) (((double *) __pyx_v_indIn.data) + __pyx_t_406)) )) = __pyx_v_indin;
 7460: 
+7461:     return np.asarray(SIn), np.asarray(SOut), np.asarray(VPerpIn), np.asarray(VPerpOut), np.asarray(indIn), np.asarray(indOut)
  __Pyx_XDECREF(__pyx_r);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_SIn, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_SOut, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_18 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_18)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_18);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_18) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_18, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_VPerpIn, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_18))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_18);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_18);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_18, function);
    }
  }
  __pyx_t_1 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_18, __pyx_t_15, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_18, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_VPerpOut, 2, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
    }
  }
  __pyx_t_18 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_indIn, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_16)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_16);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_15 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_16, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_indOut, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_407 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_16))) {
    __pyx_t_407 = PyMethod_GET_SELF(__pyx_t_16);
    if (likely(__pyx_t_407)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16);
      __Pyx_INCREF(__pyx_t_407);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_16, function);
    }
  }
  __pyx_t_5 = (__pyx_t_407) ? __Pyx_PyObject_Call2Args(__pyx_t_16, __pyx_t_407, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_3);
  __Pyx_XDECREF(__pyx_t_407); __pyx_t_407 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
  __pyx_t_16 = PyTuple_New(6); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 7461, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_16, 2, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_18);
  PyTuple_SET_ITEM(__pyx_t_16, 3, __pyx_t_18);
  __Pyx_GIVEREF(__pyx_t_15);
  PyTuple_SET_ITEM(__pyx_t_16, 4, __pyx_t_15);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_16, 5, __pyx_t_5);
  __pyx_t_4 = 0;
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_18 = 0;
  __pyx_t_15 = 0;
  __pyx_t_5 = 0;
  __pyx_r = __pyx_t_16;
  __pyx_t_16 = 0;
  goto __pyx_L0;